2 commits - plugins/calendar plugins/libkolab plugins/tasklist
Thomas Brüderli
bruederli at kolabsys.com
Wed Apr 23 20:44:56 CEST 2014
plugins/calendar/calendar.php | 11 +++
plugins/calendar/drivers/calendar_driver.php | 11 +++
plugins/calendar/drivers/database/database_driver.php | 30 ++++++++++
plugins/calendar/drivers/kolab/kolab_driver.php | 11 +++
plugins/libkolab/lib/kolab_storage.php | 12 ++++
plugins/libkolab/libkolab.php | 5 +
plugins/tasklist/drivers/database/tasklist_database_driver.php | 21 ++++++-
plugins/tasklist/drivers/tasklist_driver.php | 11 +++
plugins/tasklist/tasklist.php | 10 +++
9 files changed, 119 insertions(+), 3 deletions(-)
New commits:
commit 27f1717d0140258a9b380576eb6010f4133cbd18
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Wed Apr 23 20:44:46 2014 +0200
Implement user_delete plugin hooks to clean-up calendar and tasks data
diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php
index ef39665..4bfe0d9 100644
--- a/plugins/calendar/calendar.php
+++ b/plugins/calendar/calendar.php
@@ -100,6 +100,8 @@ class calendar extends rcube_plugin
// default startup routine
$this->add_hook('startup', array($this, 'startup'));
}
+
+ $this->add_hook('user_delete', array($this, 'user_delete'));
}
/**
@@ -2699,6 +2701,15 @@ class calendar extends rcube_plugin
}
/**
+ * Handler for user_delete plugin hook
+ */
+ public function user_delete($args)
+ {
+ $this->load_driver();
+ return $this->driver->user_delete($args);
+ }
+
+ /**
* Magic getter for public access to protected members
*/
public function __get($name)
diff --git a/plugins/calendar/drivers/calendar_driver.php b/plugins/calendar/drivers/calendar_driver.php
index 6769cfd..c5eff9d 100644
--- a/plugins/calendar/drivers/calendar_driver.php
+++ b/plugins/calendar/drivers/calendar_driver.php
@@ -531,4 +531,15 @@ abstract class calendar_driver
return $events;
}
+ /**
+ * Handler for user_delete plugin hook
+ *
+ * @param array Hash array with hook arguments
+ * @return array Return arguments for plugin hooks
+ */
+ public function user_delete($args)
+ {
+ // TO BE OVERRIDDEN
+ return $args;
+ }
}
diff --git a/plugins/calendar/drivers/database/database_driver.php b/plugins/calendar/drivers/database/database_driver.php
index b4de23b..9b04bf1 100644
--- a/plugins/calendar/drivers/database/database_driver.php
+++ b/plugins/calendar/drivers/database/database_driver.php
@@ -1141,4 +1141,34 @@ class database_driver extends calendar_driver
return $valarms;
}
+ /**
+ * Handler for user_delete plugin hook
+ */
+ public function user_delete($args)
+ {
+ $db = $this->rc->db;
+ $user = $args['user'];
+ $event_ids = array();
+
+ $events = $db->query(
+ "SELECT event_id FROM " . $this->db_events . " AS ev" .
+ " LEFT JOIN " . $this->db_calendars . " cal ON (ev.calendar_id = cal.calendar_id)".
+ " WHERE user_id=?",
+ $user->ID);
+
+ while ($row = $db->fetch_assoc($calendars)) {
+ $event_ids[] = $row['event_id'];
+ }
+
+ if (!empty($event_ids)) {
+ foreach (array($this->db_attachments, $this->db_events) as $table) {
+ $db->query(sprintf("DELETE FROM $table WHERE event_id IN (%s)", join(',', $event_ids)));
+ }
+ }
+
+ foreach (array($this->db_calendars, 'itipinvitations') as $table) {
+ $db->query("DELETE FROM $table WHERE user_id=?", $user->ID);
+ }
+ }
+
}
diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php
index 6058dfb..28eb8ba 100644
--- a/plugins/calendar/drivers/kolab/kolab_driver.php
+++ b/plugins/calendar/drivers/kolab/kolab_driver.php
@@ -1299,4 +1299,15 @@ class kolab_driver extends calendar_driver
return $plugin['form']['sharing']['content'];
}
+
+ /**
+ * Handler for user_delete plugin hook
+ */
+ public function user_delete($args)
+ {
+ $db = $this->rc->get_dbh();
+ foreach (array('kolab_alarms', 'itipinvitations') as $table) {
+ $db->query("DELETE FROM $table WHERE user_id=?", $args['user']->ID);
+ }
+ }
}
diff --git a/plugins/tasklist/drivers/database/tasklist_database_driver.php b/plugins/tasklist/drivers/database/tasklist_database_driver.php
index f40d504..cf1885b 100644
--- a/plugins/tasklist/drivers/database/tasklist_database_driver.php
+++ b/plugins/tasklist/drivers/database/tasklist_database_driver.php
@@ -89,7 +89,8 @@ class tasklist_database_driver extends tasklist_driver
{
// attempt to create a default list for this user
if (empty($this->lists)) {
- if ($this->create_list(array('name' => 'Default', 'color' => '000000')))
+ $prop = array('name' => 'Default', 'color' => '000000');
+ if ($this->create_list($prop))
$this->_read_lists();
}
@@ -723,4 +724,22 @@ class tasklist_database_driver extends tasklist_driver
return $valarms;
}
+ /**
+ * Handler for user_delete plugin hook
+ */
+ public function user_delete($args)
+ {
+ $db = $this->rc->db;
+ $list_ids = array();
+ $lists = $db->query("SELECT tasklist_id FROM " . $this->db_lists . " WHERE user_id=?", $args['user']->ID);
+ while ($row = $db->fetch_assoc($lists)) {
+ $list_ids[] = $row['tasklist_id'];
+ }
+
+ if (!empty($list_ids)) {
+ foreach (array($this->db_tasks, $this->db_lists) as $table) {
+ $db->query(sprintf("DELETE FROM $table WHERE tasklist_id IN (%s)", join(',', $list_ids)));
+ }
+ }
+ }
}
diff --git a/plugins/tasklist/drivers/tasklist_driver.php b/plugins/tasklist/drivers/tasklist_driver.php
index ee5a161..382a910 100644
--- a/plugins/tasklist/drivers/tasklist_driver.php
+++ b/plugins/tasklist/drivers/tasklist_driver.php
@@ -277,4 +277,15 @@ abstract class tasklist_driver
return $html;
}
+ /**
+ * Handler for user_delete plugin hook
+ *
+ * @param array Hash array with hook arguments
+ * @return array Return arguments for plugin hooks
+ */
+ public function user_delete($args)
+ {
+ // TO BE OVERRIDDEN
+ return $args;
+ }
}
diff --git a/plugins/tasklist/tasklist.php b/plugins/tasklist/tasklist.php
index 9532c61..ace7e45 100644
--- a/plugins/tasklist/tasklist.php
+++ b/plugins/tasklist/tasklist.php
@@ -75,6 +75,8 @@ class tasklist extends rcube_plugin
// proceed initialization in startup hook
$this->add_hook('startup', array($this, 'startup'));
+
+ $this->add_hook('user_delete', array($this, 'user_delete'));
}
/**
@@ -984,5 +986,13 @@ class tasklist extends rcube_plugin
return strtoupper(md5(time() . uniqid(rand())) . '-' . substr(md5($this->rc->user->get_username()), 0, 16));
}
+ /**
+ * Handler for user_delete plugin hook
+ */
+ public function user_delete($args)
+ {
+ $this->load_driver();
+ return $this->driver->user_delete($args);
+ }
}
commit 51bfc0ea4d963afe07cb7b3fac20286d1bcaf053
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Wed Apr 23 20:00:24 2014 +0200
Hook into user_delete actions and clear cache data for the given user.
ATTENTION: this requires 'libkolab' to be listed in $config['plugins'].
diff --git a/plugins/libkolab/lib/kolab_storage.php b/plugins/libkolab/lib/kolab_storage.php
index b7c981b..52df016 100644
--- a/plugins/libkolab/lib/kolab_storage.php
+++ b/plugins/libkolab/lib/kolab_storage.php
@@ -1141,6 +1141,18 @@ class kolab_storage
}
}
+ /**
+ * Handler for user_delete plugin hooks
+ *
+ * Remove all cache data from the local database related to the given user.
+ */
+ public static function delete_user_folders($args)
+ {
+ $db = rcmail::get_instance()->get_dbh();
+ $prefix = 'imap://' . urlencode($args['username']) . '@' . $args['host'] . '/%';
+ $db->query("DELETE FROM " . $db->table_name('kolab_folders') . " WHERE resource LIKE ?", $prefix);
+ }
+
}
/**
diff --git a/plugins/libkolab/libkolab.php b/plugins/libkolab/libkolab.php
index 48a5033..c32d65a 100644
--- a/plugins/libkolab/libkolab.php
+++ b/plugins/libkolab/libkolab.php
@@ -37,12 +37,13 @@ class libkolab extends rcube_plugin
// load local config
$this->load_config();
- $this->add_hook('storage_init', array($this, 'storage_init'));
-
// extend include path to load bundled lib classes
$include_path = $this->home . '/lib' . PATH_SEPARATOR . ini_get('include_path');
set_include_path($include_path);
+ $this->add_hook('storage_init', array($this, 'storage_init'));
+ $this->add_hook('user_delete', array('kolab_storage', 'delete_user_folders'));
+
$rcmail = rcube::get_instance();
try {
kolab_format::$timezone = new DateTimeZone($rcmail->config->get('timezone', 'GMT'));
More information about the commits
mailing list