From 8c36e7d88febeca00b3598af7fb50c554fdd087b Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 4 Aug 2011 23:55:41 +0200 Subject: [PATCH] Fix event reading/caching in database backend --- .../drivers/database/database_driver.php | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/plugins/calendar/drivers/database/database_driver.php b/plugins/calendar/drivers/database/database_driver.php index a045b468..89118ba0 100644 --- a/plugins/calendar/drivers/database/database_driver.php +++ b/plugins/calendar/drivers/database/database_driver.php @@ -34,6 +34,7 @@ class database_driver extends calendar_driver private $rc; private $cal; + private $cache = array(); private $calendars = array(); private $calendar_ids = ''; private $free_busy_map = array('free' => 0, 'busy' => 1, 'out-of-office' => 2, 'outofoffice' => 2, 'tentative' => 3); @@ -215,6 +216,8 @@ class database_driver extends calendar_driver $event_id = $this->rc->db->insert_id($this->sequence_events); if ($event_id) { + $this->cache[$eventid] = $event; + // add attachments if (!empty($event['attachments'])) { foreach ($event['attachments'] as $attachment) { @@ -440,8 +443,11 @@ class database_driver extends calendar_driver } } - if ($success && $update_recurring) - $this->_update_recurring($event); + if ($success) { + unset($this->cache[$event['id']]); + if ($update_recurring) + $this->_update_recurring($event); + } return $success; } @@ -609,12 +615,10 @@ class database_driver extends calendar_driver */ public function get_event($event) { - static $cache = array(); - $id = is_array($event) ? $event['id'] : $event; - if ($cache[$id]) - return $cache[$id]; + if ($this->cache[$id]) + return $this->cache[$id]; $result = $this->rc->db->query(sprintf( "SELECT * FROM " . $this->db_events . " @@ -625,8 +629,8 @@ class database_driver extends calendar_driver $id); if ($result && ($event = $this->rc->db->fetch_assoc($result))) { - $cache[$id] = $this->_read_postprocess($event); - return $cache[$id]; + $this->cache[$id] = $this->_read_postprocess($event); + return $this->cache[$id]; } return false;