3 * Handles persistence of data for plugins
4 * @author Olivier Berger
9 * Handles persistence of data for a plugin as a whole
10 * @author Olivier Berger
14 // May create an interface with 2 implementations : JSON or php serialize...
16 class PluginPersistentStore extends Error {
22 CREATE TABLE plugins_persistence (
24 persisted_key character varying(100),
26 -- CONSTRAINT plugins_persistence_pkey PRIMARY KEY (plugin_id, persisted_key) not necessary to have unique keys
27 -- May need an index on (plugin_id, persisted_key)
31 const persistence_table = 'plugins_persistence';
35 * @param integer $plugin_id
37 public function __construct($plugin_id) {
38 $this->plugin_id = $plugin_id;
41 protected function additionalAndClause() {
45 * Loads persisted objects (saved in serialized form)
49 public function readObject($key) {
51 $res = db_query_params('SELECT persisted_data
52 FROM '.self::persistence_table.'
54 AND persisted_key = $2 '.$self->additionalAndClause(),
55 array($this->plugin_id,
57 $rows = db_numrows($res);
61 $this->setError(_('More than one value for the plugin + key'))
63 for ($i=0; $i<$rows; $i++) {
64 $data = db_result($res,$i,'persisted_data');
65 $object = unserialize($data);
71 public function saveObject($object, $key) {
72 $data = serialize($object);
73 $res = db_query_params('INSERT INTO '. self::persistence_table .' (plugin_id, persisted_key, persisted_data) VALUES ($1, $2, $3)',
74 array($this->plugin_id, $key, $data));
80 * Handles persistence of data for a plugin, by group
84 class PluginGroupPersistentStore {
88 CREATE TABLE group_plugin_persistence (
89 group_plugin_id integer,
90 persisted_key character varying(100),
92 CONSTRAINT plugins_persistence_pkey PRIMARY KEY (group_plugin_id, persisted_key)
95 public function __construct($plugin_id, $group_id) {
96 parent::__construct($plugin_id);
98 $res = db_query_params('SELECT group_plugin_id
101 AND group_id=$2', array($plugin_id, $group_id));
102 $rows = db_numrows($res);
105 $this->setError(_('More than one value for the plugin + key'));
107 $this->group_plugin_id = db_result($res,0,'persisted_data');
110 protected function additionalAndClause() {
111 $clause = parent::additionalAndClause();
112 $clause .= 'AND group_plugin_id='.$this->group_plugin_id;
119 * Handles persistence of data for a plugin, by user
123 class PluginUserPersistentStore {
128 CREATE TABLE user_plugin_persistence (
129 user_plugin_id integer,
130 persisted_key character varying(100),
131 persisted_data bytea,
132 CONSTRAINT plugins_persistence_pkey PRIMARY KEY (user_plugin_id, persisted_key)