3 * Handles persistence of data for plugins
5 * @author Olivier Berger
10 * Handles persistence of data for a plugin as a whole
12 * @author Olivier Berger
16 // May create an interface with 2 implementations : JSON or php serialize...
18 class PluginPersistentStore extends Error {
24 CREATE TABLE plugins_persistence (
26 persisted_key character varying(100),
28 -- CONSTRAINT plugins_persistence_pkey PRIMARY KEY (plugin_id, persisted_key) not necessary to have unique keys
29 -- May need an index on (plugin_id, persisted_key)
33 const persistence_table = 'plugins_persistence';
38 * @param integer $plugin_id
40 public function __construct($plugin_id) {
41 $this->plugin_id = $plugin_id;
44 protected function additionalAndClause() {
49 * Loads persisted objects (saved in serialized form)
54 public function readObject($key) {
56 $res = db_query_params('SELECT persisted_data
57 FROM '.self::persistence_table.'
59 AND persisted_key = $2 '.$self->additionalAndClause(),
60 array($this->plugin_id,
62 $rows = db_numrows($res);
66 $this->setError(_('More than one value for the plugin + key'))
68 for ($i = 0; $i < $rows; $i++) {
69 $data = db_result($res, $i, 'persisted_data');
70 $object = unserialize($data);
76 public function saveObject($object, $key) {
77 $data = serialize($object);
78 $res = db_query_params('INSERT INTO '.self::persistence_table.' (plugin_id, persisted_key, persisted_data) VALUES ($1, $2, $3)',
79 array($this->plugin_id, $key, $data));
85 * Handles persistence of data for a plugin, by group
90 class PluginGroupPersistentStore {
94 CREATE TABLE group_plugin_persistence (
95 group_plugin_id integer,
96 persisted_key character varying(100),
98 CONSTRAINT plugins_persistence_pkey PRIMARY KEY (group_plugin_id, persisted_key)
101 public function __construct($plugin_id, $group_id) {
102 parent::__construct($plugin_id);
104 $res = db_query_params('SELECT group_plugin_id
107 AND group_id=$2', array($plugin_id, $group_id));
108 $rows = db_numrows($res);
111 $this->setError(_('More than one value for the plugin + key'));
113 $this->group_plugin_id = db_result($res, 0, 'persisted_data');
116 protected function additionalAndClause() {
117 $clause = parent::additionalAndClause();
118 $clause .= 'AND group_plugin_id='.$this->group_plugin_id;
125 * Handles persistence of data for a plugin, by user
130 class PluginUserPersistentStore {
135 CREATE TABLE user_plugin_persistence (
136 user_plugin_id integer,
137 persisted_key character varying(100),
138 persisted_data bytea,
139 CONSTRAINT plugins_persistence_pkey PRIMARY KEY (user_plugin_id, persisted_key)