]> git.wh0rd.org - tt-rss.git/commitdiff
add plugin storage table to schema; add ability to clear plugin data
authorAndrew Dolgov <fox@madoka.volgo-balt.ru>
Thu, 27 Dec 2012 15:20:12 +0000 (19:20 +0400)
committerAndrew Dolgov <fox@madoka.volgo-balt.ru>
Thu, 27 Dec 2012 15:20:36 +0000 (19:20 +0400)
classes/pluginhost.php
classes/pref/prefs.php
include/functions.php
js/prefs.js
schema/ttrss_schema_mysql.sql
schema/ttrss_schema_pgsql.sql
schema/versions/mysql/101.sql [new file with mode: 0644]
schema/versions/pgsql/101.sql [new file with mode: 0644]

index e43b39f9dd404fd8ea0443225a4866dc45e66927..d7db7481cc0cd31ec281be8271a42fcd3d7a731b 100644 (file)
@@ -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;
+               }
+       }
 }
 ?>
index 0922e43a8068fcaa86bc6894699684e67ee28453..bb82b355edac60376e5539cbed5d8d9273939ecb 100644 (file)
@@ -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));
+       }
 }
 ?>
index b382b4069fb3fb4ceca54122be8c094e28e0db44..89e767e2ce872f861836df406404bdcb9fbd7520 100644 (file)
@@ -1,6 +1,6 @@
 <?php
        define('EXPECTED_CONFIG_VERSION', 26);
-       define('SCHEMA_VERSION', 100);
+       define('SCHEMA_VERSION', 101);
 
        $fetch_last_error = false;
        $pluginhost = false;
                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) {
index 0b3f47c0aacfde212fbd7afbcff67bd897c5b955..7ee88ab56a137b11e535c5ccad2ebfd03ea7b2ce 100644 (file)
@@ -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);
+       }
+}
index bb8bd1028a2fb46580d88f6d48b720a5dea7e244..0b0c587b9ac7b6ba59033751f3b1a38b1da0c7d4 100644 (file)
@@ -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;
index 3c508bb3439f0fc5bd30cb6e94d943e081c91ae7..f52d4191d30fe30384cc65368daf0b156d7a5d62 100644 (file)
@@ -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 (file)
index 0000000..47ff265
--- /dev/null
@@ -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 (file)
index 0000000..5be8590
--- /dev/null
@@ -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;