diff --git a/classes/pluginhost.php b/classes/pluginhost.php index e43b39f9dd404fd8ea0443225a4866dc45e66927..d7db7481cc0cd31ec281be8271a42fcd3d7a731b 100644 --- a/classes/pluginhost.php +++ b/classes/pluginhost.php @@ -1,9 +1,4 @@ <?php -/* create table ttrss_plugin_storage - (id serial not null primary key, name varchar(100) not null, - owner_uid integer not null references ttrss_users(id) ON DELETE CASCADE, - content text not null) - not in schema yet -*/ class PluginHost { private $link; private $hooks = array(); @@ -81,9 +76,9 @@ class PluginHost { return array(); } } - function load_all($kind) { + function load_all($kind, $owner_uid = false) { $plugins = array_map("basename", glob("plugins/*")); - $this->load(join(",", $plugins), $kind); + $this->load(join(",", $plugins), $kind, $owner_uid); } function load($classlist, $kind, $owner_uid = false) { @@ -263,7 +258,7 @@ class PluginHost { if ($sync) $this->save_data(get_class($sender)); } - function get($sender, $name, $default_value) { + function get($sender, $name, $default_value = false) { $idx = get_class($sender); if (isset($this->storage[$idx][$name])) { @@ -278,5 +273,18 @@ class PluginHost { return $this->storage[$idx]; } + + function clear_data($sender) { + if ($this->owner_uid) { + $idx = get_class($sender); + + unset($this->storage[$idx]); + + db_query($this->link, "DELETE FROM ttrss_plugin_storage WHERE name = '$idx' + AND owner_uid = " . $this->owner_uid); + + $_SESSION["plugin_storage"] = $this->storage; + } + } } ?> diff --git a/classes/pref/prefs.php b/classes/pref/prefs.php index 0922e43a8068fcaa86bc6894699684e67ee28453..bb82b355edac60376e5539cbed5d8d9273939ecb 100644 --- a/classes/pref/prefs.php +++ b/classes/pref/prefs.php @@ -683,8 +683,9 @@ class Pref_Prefs extends Handler_Protected { $system_enabled = array_map("trim", explode(",", PLUGINS)); $user_enabled = array_map("trim", explode(",", get_pref($this->link, "_ENABLED_PLUGINS"))); - $tmppluginhost = new PluginHost($link); - $tmppluginhost->load_all($tmppluginhost::KIND_ALL); + $tmppluginhost = new PluginHost($this->link); + $tmppluginhost->load_all($tmppluginhost::KIND_ALL, $_SESSION["uid"]); + $tmppluginhost->load_data(true); foreach ($tmppluginhost->get_plugins() as $name => $plugin) { $about = $plugin->about(); @@ -707,6 +708,11 @@ class Pref_Prefs extends Handler_Protected { print "<td>" . htmlspecialchars(sprintf("%.2f", $about[0])) . "</td>"; print "<td>" . htmlspecialchars($about[2]) . "</td>"; + if (count($tmppluginhost->get_all($plugin)) > 0) { + print "<td><a href='#' onclick=\"clearPluginData('$name')\" + class='visibleLink'>".__("Clear data")."</a></td>"; + } + print "</tr>"; } @@ -752,6 +758,10 @@ class Pref_Prefs extends Handler_Protected { print "<td>" . htmlspecialchars(sprintf("%.2f", $about[0])) . "</td>"; print "<td>" . htmlspecialchars($about[2]) . "</td>"; + if (count($tmppluginhost->get_all($plugin)) > 0) { + print "<td><a href='#' onclick=\"clearPluginData('$name')\" class='visibleLink'>".__("Clear data")."</a></td>"; + } + print "</tr>"; @@ -846,5 +856,12 @@ class Pref_Prefs extends Handler_Protected { set_pref($this->link, "_ENABLED_PLUGINS", $plugins); } + + function clearplugindata() { + $name = db_escape_string($_REQUEST["name"]); + + global $pluginhost; + $pluginhost->clear_data($pluginhost->get_plugin($name)); + } } ?> diff --git a/include/functions.php b/include/functions.php index b382b4069fb3fb4ceca54122be8c094e28e0db44..89e767e2ce872f861836df406404bdcb9fbd7520 100644 --- a/include/functions.php +++ b/include/functions.php @@ -1,6 +1,6 @@ <?php define('EXPECTED_CONFIG_VERSION', 26); - define('SCHEMA_VERSION', 100); + define('SCHEMA_VERSION', 101); $fetch_last_error = false; $pluginhost = false; @@ -547,25 +547,6 @@ if (!SINGLE_USER_MODE) { $user_id = false; - /* $modules = explode(",", AUTH_MODULES); - - foreach ($modules as $module) { - $module_class = "auth_$module"; - if (class_exists($module_class)) { - $authenticator = new $module_class($link); - - $user_id = (int) $authenticator->authenticate($login, $password); - - if ($user_id) { - $_SESSION["auth_module"] = $module; - break; - } - - } else { - print T_sprintf("Fatal: authentication module %s not found.", $module); - die; - } - } */ global $pluginhost; foreach ($pluginhost->get_hooks($pluginhost::HOOK_AUTH_USER) as $plugin) { diff --git a/js/prefs.js b/js/prefs.js index 0b3f47c0aacfde212fbd7afbcff67bd897c5b955..7ee88ab56a137b11e535c5ccad2ebfd03ea7b2ce 100644 --- a/js/prefs.js +++ b/js/prefs.js @@ -1925,3 +1925,20 @@ function toggleAdvancedPrefs() { exception_error("toggleAdvancedPrefs", e); } } + +function clearPluginData(name) { + try { + if (confirm(__("Clear stored data for this plugin?"))) { + notify_progress("Loading, please wait..."); + + new Ajax.Request("backend.php", { + parameters: "?op=pref-prefs&method=clearplugindata&name=" + param_escape(name), + onComplete: function(transport) { + notify(''); + updatePrefsList(); + } }); + } + } catch (e) { + exception_error("clearPluginData", e); + } +} diff --git a/schema/ttrss_schema_mysql.sql b/schema/ttrss_schema_mysql.sql index bb8bd1028a2fb46580d88f6d48b720a5dea7e244..0b0c587b9ac7b6ba59033751f3b1a38b1da0c7d4 100644 --- a/schema/ttrss_schema_mysql.sql +++ b/schema/ttrss_schema_mysql.sql @@ -1,6 +1,7 @@ SET NAMES utf8; SET CHARACTER SET utf8; +drop table if exists ttrss_plugin_storage; drop table if exists ttrss_linked_feeds; drop table if exists ttrss_linked_instances; drop table if exists ttrss_access_keys; @@ -528,4 +529,12 @@ create table ttrss_linked_feeds ( subscribers integer not null, foreign key (instance_id) references ttrss_linked_instances(id) ON DELETE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=UTF8; +create table ttrss_plugin_storage ( + id integer not null auto_increment primary key, + name varchar(100) not null, + owner_uid integer not null, + content longtext not null, + foreign key (owner_uid) references ttrss_users(id) ON DELETE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=UTF8; + + commit; diff --git a/schema/ttrss_schema_pgsql.sql b/schema/ttrss_schema_pgsql.sql index 3c508bb3439f0fc5bd30cb6e94d943e081c91ae7..f52d4191d30fe30384cc65368daf0b156d7a5d62 100644 --- a/schema/ttrss_schema_pgsql.sql +++ b/schema/ttrss_schema_pgsql.sql @@ -1,3 +1,4 @@ +drop table if exists ttrss_plugin_storage; drop table if exists ttrss_linked_feeds; drop table if exists ttrss_linked_instances; drop table if exists ttrss_access_keys; @@ -256,7 +257,7 @@ create index ttrss_tags_post_int_id_idx on ttrss_tags(post_int_id); create table ttrss_version (schema_version int not null); -insert into ttrss_version values (100); +insert into ttrss_version values (101); create table ttrss_enclosures (id serial not null primary key, content_url text not null, @@ -461,4 +462,10 @@ create table ttrss_linked_feeds ( instance_id integer not null references ttrss_linked_instances(id) ON DELETE CASCADE, subscribers integer not null); +create table ttrss_plugin_storage ( + id serial not null primary key, + name varchar(100) not null, + owner_uid integer not null references ttrss_users(id) ON DELETE CASCADE, + content text not null); + commit; diff --git a/schema/versions/mysql/101.sql b/schema/versions/mysql/101.sql new file mode 100644 index 0000000000000000000000000000000000000000..47ff265228b41e6e4085d6fc000204f3bd282355 --- /dev/null +++ b/schema/versions/mysql/101.sql @@ -0,0 +1,12 @@ +begin; + +create table ttrss_plugin_storage ( + id integer not null auto_increment primary key, + name varchar(100) not null, + owner_uid integer not null, + content longtext not null, + foreign key (owner_uid) references ttrss_users(id) ON DELETE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=UTF8; + +update ttrss_version set schema_version = 101; + +commit; diff --git a/schema/versions/pgsql/101.sql b/schema/versions/pgsql/101.sql new file mode 100644 index 0000000000000000000000000000000000000000..5be859002beec0e6cc0655e8c53ed7ed6454df94 --- /dev/null +++ b/schema/versions/pgsql/101.sql @@ -0,0 +1,11 @@ +begin; + +create table ttrss_plugin_storage ( + id serial not null primary key, + name varchar(100) not null, + owner_uid integer not null references ttrss_users(id) ON DELETE CASCADE, + content text not null); + +update ttrss_version set schema_version = 101; + +commit;