Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F1842292
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
9 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/plugins/libkolab/lib/kolab_format_configuration.php b/plugins/libkolab/lib/kolab_format_configuration.php
index 30ddaf36..ceb7ebb6 100644
--- a/plugins/libkolab/lib/kolab_format_configuration.php
+++ b/plugins/libkolab/lib/kolab_format_configuration.php
@@ -1,282 +1,284 @@
<?php
/**
* Kolab Configuration data model class
*
* @version @package_version@
* @author Thomas Bruederli <bruederli@kolabsys.com>
*
* Copyright (C) 2012, Kolab Systems AG <contact@kolabsys.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
class kolab_format_configuration extends kolab_format
{
public $CTYPE = 'application/vnd.kolab+xml';
public $CTYPEv2 = 'application/x-vnd.kolab.configuration';
protected $objclass = 'Configuration';
protected $read_func = 'readConfiguration';
protected $write_func = 'writeConfiguration';
private $type_map = array(
'category' => Configuration::TypeCategoryColor,
'dictionary' => Configuration::TypeDictionary,
'file_driver' => Configuration::TypeFileDriver,
'relation' => Configuration::TypeRelation,
'snippet' => Configuration::TypeSnippet,
);
private $driver_settings_fields = array('host', 'port', 'username', 'password');
/**
* Set properties to the kolabformat object
*
* @param array Object data as hash array
*/
public function set(&$object)
{
// read type-specific properties
switch ($object['type']) {
case 'dictionary':
$dict = new Dictionary($object['language']);
$dict->setEntries(self::array2vector($object['e']));
$this->obj = new Configuration($dict);
break;
case 'category':
// TODO: implement this
$categories = new vectorcategorycolor;
$this->obj = new Configuration($categories);
break;
case 'file_driver':
$driver = new FileDriver($object['driver'], $object['title']);
$driver->setEnabled((bool) $object['enabled']);
foreach ($this->driver_settings_fields as $field) {
$value = $object[$field];
if ($value !== null) {
$driver->{'set' . ucfirst($field)}($value);
}
}
$this->obj = new Configuration($driver);
break;
case 'relation':
$relation = new Relation(strval($object['name']), strval($object['category']));
if ($object['color']) {
$relation->setColor($object['color']);
}
if ($object['parent']) {
$relation->setParent($object['parent']);
}
if ($object['iconName']) {
$relation->setIconName($object['iconName']);
}
if ($object['priority'] > 0) {
$relation->setPriority((int) $object['priority']);
}
if (!empty($object['members'])) {
$relation->setMembers(self::array2vector($object['members']));
}
$this->obj = new Configuration($relation);
break;
case 'snippet':
$collection = new SnippetCollection($object['name']);
$snippets = new vectorsnippets;
foreach ((array) $object['snippets'] as $item) {
$snippet = new snippet($item['name'], $item['text']);
$snippet->setTextType(strtolower($item['type']) == 'html' ? Snippet::HTML : Snippet::Plain);
if ($item['shortcut']) {
$snippet->setShortCut($item['shortcut']);
}
$snippets->push($snippet);
}
$collection->setSnippets($snippets);
$this->obj = new Configuration($collection);
break;
default:
return false;
}
// adjust content-type string
$this->CTYPEv2 = 'application/x-vnd.kolab.configuration.' . $object['type'];
+ // reset old object data, otherwise set() will overwrite current data (#4095)
+ $this->xmldata = null;
// set common object properties
parent::set($object);
// cache this data
$this->data = $object;
unset($this->data['_formatobj']);
}
/**
*
*/
public function is_valid()
{
return $this->data || (is_object($this->obj) && $this->obj->isValid());
}
/**
* Convert the Configuration object into a hash array data structure
*
* @param array Additional data for merge
*
* @return array Config object data as hash array
*/
public function to_array($data = array())
{
// return cached result
if (!empty($this->data)) {
return $this->data;
}
// read common object props into local data object
$object = parent::to_array($data);
$type_map = array_flip($this->type_map);
$object['type'] = $type_map[$this->obj->type()];
// read type-specific properties
switch ($object['type']) {
case 'dictionary':
$dict = $this->obj->dictionary();
$object['language'] = $dict->language();
$object['e'] = self::vector2array($dict->entries());
break;
case 'category':
// TODO: implement this
break;
case 'file_driver':
$driver = $this->obj->fileDriver();
$object['driver'] = $driver->driver();
$object['title'] = $driver->title();
$object['enabled'] = $driver->enabled();
foreach ($this->driver_settings_fields as $field) {
$object[$field] = $driver->{$field}();
}
break;
case 'relation':
$relation = $this->obj->relation();
$object['name'] = $relation->name();
$object['category'] = $relation->type();
$object['color'] = $relation->color();
$object['parent'] = $relation->parent();
$object['iconName'] = $relation->iconName();
$object['priority'] = $relation->priority();
$object['members'] = self::vector2array($relation->members());
break;
case 'snippet':
$collection = $this->obj->snippets();
$object['name'] = $collection->name();
$object['snippets'] = array();
$snippets = $collection->snippets();
for ($i=0; $i < $snippets->size(); $i++) {
$snippet = $snippets->get($i);
$object['snippets'][] = array(
'name' => $snippet->name(),
'text' => $snippet->text(),
'type' => $snippet->textType() == Snippet::HTML ? 'html' : 'plain',
'shortcut' => $snippet->shortCut(),
);
}
break;
}
// adjust content-type string
if ($object['type']) {
$this->CTYPEv2 = 'application/x-vnd.kolab.configuration.' . $object['type'];
}
$this->data = $object;
return $this->data;
}
/**
* Callback for kolab_storage_cache to get object specific tags to cache
*
* @return array List of tags to save in cache
*/
public function get_tags()
{
$tags = array();
switch ($this->data['type']) {
case 'dictionary':
$tags = array($this->data['language']);
break;
case 'relation':
$tags = array('category:' . $this->data['category']);
break;
}
return $tags;
}
/**
* Callback for kolab_storage_cache to get words to index for fulltext search
*
* @return array List of words to save in cache
*/
public function get_words()
{
$words = array();
foreach ((array)$this->data['members'] as $url) {
$member = kolab_storage_config::parse_member_url($url);
if (empty($member)) {
if (strpos($url, 'urn:uuid:') === 0) {
$words[] = substr($url, 9);
}
}
else if (!empty($member['params']['message-id'])) {
$words[] = $member['params']['message-id'];
}
else {
// derive message identifier from URI
$words[] = md5($url);
}
}
return $words;
}
}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Mon, Aug 25, 9:18 PM (9 h, 5 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
257802
Default Alt Text
(9 KB)
Attached To
Mode
R14 roundcubemail-plugins-kolab
Attached
Detach File
Event Timeline
Log In to Comment