roundcubemail-plugins-kolab/plugins/libkolab/lib/kolab_format_file.php

143 lines
4.3 KiB
PHP
Raw Normal View History

2012-11-15 12:44:25 +01:00
<?php
/**
* Kolab File model class
*
* @version @package_version@
* @author Thomas Bruederli <bruederli@kolabsys.com>
* @author Aleksander Machniak <machniak@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_file extends kolab_format
{
public $CTYPE = 'application/vnd.kolab+xml';
2012-11-15 12:44:25 +01:00
protected $objclass = 'File';
2012-11-15 12:44:25 +01:00
protected $read_func = 'kolabformat::readKolabFile';
protected $write_func = 'kolabformat::writeKolabFile';
/**
* Set properties to the kolabformat object
*
* @param array Object data as hash array
*/
public function set(&$object)
{
// set common object properties
parent::set($object);
2012-11-15 12:44:25 +01:00
$this->obj->setCategories(self::array2vector($object['categories'] ?? null));
2012-11-15 12:44:25 +01:00
if (isset($object['notes'])) {
$this->obj->setNote($object['notes']);
}
// Add file attachment
2023-01-18 16:38:22 +01:00
if (!empty($object['_attachments'])) {
2012-11-15 12:44:25 +01:00
$cid = key($object['_attachments']);
$attach_attr = $object['_attachments'][$cid];
2024-01-24 11:24:41 +01:00
$attach = new Attachment();
2012-11-15 12:44:25 +01:00
$attach->setLabel((string)$attach_attr['name']);
$attach->setUri('cid:' . $cid, $attach_attr['mimetype']);
$this->obj->setFile($attach);
// make sure size is set, so object saved in cache contains this info
if (!isset($attach_attr['size'])) {
$size = 0;
if (!empty($attach_attr['content'])) {
if (is_resource($attach_attr['content'])) {
$stat = fstat($attach_attr['content']);
$size = $stat ? $stat['size'] : 0;
2024-01-24 11:24:41 +01:00
} else {
$size = strlen($attach_attr['content']);
}
2024-01-24 11:24:41 +01:00
} elseif (isset($attach_attr['path'])) {
$size = @filesize($attach_attr['path']);
2012-11-15 12:44:25 +01:00
}
$object['_attachments'][$cid]['size'] = $size;
2012-11-15 12:44:25 +01:00
}
}
// cache this data
$this->data = $object;
unset($this->data['_formatobj']);
}
/**
* Check if object's data validity
2012-11-15 12:44:25 +01:00
*/
public function is_valid()
{
return !$this->formaterror && ($this->data || (is_object($this->obj) && $this->obj->isValid()));
2012-11-15 12:44:25 +01:00
}
/**
* Convert the Configuration object into a hash array data structure
*
* @param array Additional data for merge
*
2012-11-15 12:44:25 +01:00
* @return array Config object data as hash array
*/
2023-01-18 16:38:22 +01:00
public function to_array($data = [])
2012-11-15 12:44:25 +01:00
{
// return cached result
if (!empty($this->data)) {
2012-11-15 12:44:25 +01:00
return $this->data;
}
2012-11-15 12:44:25 +01:00
// read common object props into local data object
$object = parent::to_array($data);
2012-11-15 12:44:25 +01:00
// read object properties
2023-01-18 16:38:22 +01:00
$object += [
2012-11-15 12:44:25 +01:00
'categories' => self::vector2array($this->obj->categories()),
'notes' => $this->obj->note(),
2023-01-18 16:38:22 +01:00
];
2012-11-15 12:44:25 +01:00
return $this->data = $object;
2012-11-15 12:44:25 +01:00
}
/**
* 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()
{
2023-01-18 16:38:22 +01:00
$tags = [];
2012-11-15 12:44:25 +01:00
2023-01-18 16:38:22 +01:00
foreach ((array)($this->data['categories'] ?? []) as $cat) {
2012-11-15 12:44:25 +01:00
$tags[] = rcube_utils::normalize_string($cat);
}
// Add file mimetype to tags
2023-01-18 16:38:22 +01:00
if (!empty($this->data['_attachments'])) {
$attachment = $this->data['_attachments'][array_key_first($this->data['_attachments'])];
2023-01-18 16:38:22 +01:00
if (!empty($attachment['mimetype'])) {
$tags[] = $attachment['mimetype'];
}
}
return $tags;
2012-11-15 12:44:25 +01:00
}
}