diff --git a/plugins/libkolab/lib/kolab_storage_cache.php b/plugins/libkolab/lib/kolab_storage_cache.php index e1ec56d9..df851d6d 100644 --- a/plugins/libkolab/lib/kolab_storage_cache.php +++ b/plugins/libkolab/lib/kolab_storage_cache.php @@ -864,7 +864,10 @@ class kolab_storage_cache } if ($object['_formatobj']) { - $sql_data['xml'] = preg_replace('!()[\n\r\t\s]+!ms', '$1', (string)$object['_formatobj']->write(3.0)); + $xml = (string) $object['_formatobj']->write(3.0); + $size = strlen($xml); + + $sql_data['xml'] = preg_replace('!()[\n\r\t\s]+!ms', '$1', $xml); $sql_data['tags'] = ' ' . join(' ', $object['_formatobj']->get_tags()) . ' '; // pad with spaces for strict/prefix search $sql_data['words'] = ' ' . join(' ', $object['_formatobj']->get_words()) . ' '; } @@ -897,6 +900,10 @@ class kolab_storage_cache } } + if ($size) { + $data['_size'] = $size; + } + // use base64 encoding (Bug #1912, #2662) $sql_data['data'] = base64_encode(serialize($data)); @@ -911,16 +918,22 @@ class kolab_storage_cache if ($sql_arr['fast-mode'] && !empty($sql_arr['data']) && ($object = unserialize(base64_decode($sql_arr['data']))) ) { + $object['uid'] = $sql_arr['uid']; + foreach ($this->data_props as $prop) { if (!isset($object[$prop]) && isset($sql_arr[$prop])) { $object[$prop] = $sql_arr[$prop]; - - if (($prop == 'created' || $prop == 'changed') && $object[$prop] && is_string($object[$prop])) { - $object[$prop] = new DateTime($object[$prop]); - } } } + if ($sql_arr['created'] && empty($object['created'])) { + $object['created'] = new DateTime($sql_arr['created']); + } + + if ($sql_arr['changed'] && empty($object['changed'])) { + $object['changed'] = new DateTime($sql_arr['changed']); + } + $object['_type'] = $sql_arr['type'] ?: $this->folder->type; $object['_msguid'] = $sql_arr['msguid']; $object['_mailbox'] = $this->folder->name; diff --git a/plugins/libkolab/lib/kolab_storage_cache_contact.php b/plugins/libkolab/lib/kolab_storage_cache_contact.php index 531781c8..6f3a0c9a 100644 --- a/plugins/libkolab/lib/kolab_storage_cache_contact.php +++ b/plugins/libkolab/lib/kolab_storage_cache_contact.php @@ -25,7 +25,7 @@ class kolab_storage_cache_contact extends kolab_storage_cache { protected $extra_cols_max = 255; protected $extra_cols = array('type', 'name', 'firstname', 'surname', 'email'); - protected $data_props = array('type', 'name', 'firstname', 'middlename', 'prefix', 'suffix', 'surname', 'email', 'organization', 'uid'); + protected $data_props = array('type', 'name', 'firstname', 'middlename', 'prefix', 'suffix', 'surname', 'email', 'organization'); protected $binary_items = array( 'photo' => '|[^;]+;base64,([^<]+)|i', 'pgppublickey' => '|data:application/pgp-keys;base64,([^<]+)|i', diff --git a/plugins/libkolab/lib/kolab_storage_cache_event.php b/plugins/libkolab/lib/kolab_storage_cache_event.php index b6d8b15f..13b350b3 100644 --- a/plugins/libkolab/lib/kolab_storage_cache_event.php +++ b/plugins/libkolab/lib/kolab_storage_cache_event.php @@ -24,6 +24,7 @@ class kolab_storage_cache_event extends kolab_storage_cache { protected $extra_cols = array('dtstart','dtend'); + protected $data_props = array('categories', 'status', 'attendees'); // start, end /** * Helper method to convert the given Kolab object into a dataset to be written to cache diff --git a/plugins/libkolab/lib/kolab_storage_cache_file.php b/plugins/libkolab/lib/kolab_storage_cache_file.php index 053438c1..1f3d4d92 100644 --- a/plugins/libkolab/lib/kolab_storage_cache_file.php +++ b/plugins/libkolab/lib/kolab_storage_cache_file.php @@ -24,7 +24,7 @@ class kolab_storage_cache_file extends kolab_storage_cache { protected $extra_cols = array('filename'); - protected $data_props = array('type', 'size', 'filename', 'fileid', 'uid'); + protected $data_props = array('type', 'size', 'filename', 'fileid'); /** * Helper method to convert the given Kolab object into a dataset to be written to cache @@ -51,4 +51,27 @@ class kolab_storage_cache_file extends kolab_storage_cache return $sql_data; } + + /** + * Helper method to turn stored cache data into a valid storage object + * + * @override + */ + protected function _unserialize($sql_arr) + { + $object = parent::_unserialize($sql_arr); + + if ($object && $sql_arr['fast-mode']) { + if (!empty($object['_attachments'])) { + $file = $object['_attachments'][key($object['_attachments'])]; + + $object['type'] = $file['mimetype']; + $object['size'] = $file['size']; + $object['fileid'] = $file['id']; + $object['filename'] = $file['name']; + } + } + + return $object; + } } diff --git a/plugins/libkolab/lib/kolab_storage_cache_journal.php b/plugins/libkolab/lib/kolab_storage_cache_journal.php index 766f1da1..042d4bde 100644 --- a/plugins/libkolab/lib/kolab_storage_cache_journal.php +++ b/plugins/libkolab/lib/kolab_storage_cache_journal.php @@ -24,6 +24,7 @@ class kolab_storage_cache_journal extends kolab_storage_cache { protected $extra_cols = array('dtstart','dtend'); + protected $data_props = array('categories'); /** * Helper method to convert the given Kolab object into a dataset to be written to cache diff --git a/plugins/libkolab/lib/kolab_storage_cache_note.php b/plugins/libkolab/lib/kolab_storage_cache_note.php index fc23d5b0..7f5ebc8e 100644 --- a/plugins/libkolab/lib/kolab_storage_cache_note.php +++ b/plugins/libkolab/lib/kolab_storage_cache_note.php @@ -23,5 +23,5 @@ class kolab_storage_cache_note extends kolab_storage_cache { - protected $data_props = array('uid', 'title', 'created', 'changed'); + protected $data_props = array('title'); } \ No newline at end of file diff --git a/plugins/libkolab/lib/kolab_storage_cache_task.php b/plugins/libkolab/lib/kolab_storage_cache_task.php index 8b714e63..06b64d39 100644 --- a/plugins/libkolab/lib/kolab_storage_cache_task.php +++ b/plugins/libkolab/lib/kolab_storage_cache_task.php @@ -23,7 +23,8 @@ class kolab_storage_cache_task extends kolab_storage_cache { - protected $extra_cols = array('dtstart','dtend'); + protected $extra_cols = array('dtstart', 'dtend'); + protected $data_props = array('categories', 'status'); // start, due /** * Helper method to convert the given Kolab object into a dataset to be written to cache