roundcubemail-plugins-kolab/plugins/kolab_files/kolab_files.php
2018-10-04 14:04:16 +00:00

173 lines
5 KiB
PHP

<?php
/**
* Kolab files storage
*
* @version @package_version@
* @author Aleksander Machniak <machniak@kolabsys.com>
*
* Copyright (C) 2013, 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_files extends rcube_plugin
{
// all task excluding 'login' and 'logout'
public $task = '?(?!login|logout).*';
public $allowed_prefs = array('kolab_files_collapsed_folders');
public $rc;
public $home;
private $engine;
public function init()
{
$this->rc = rcube::get_instance();
// Register hooks
$this->add_hook('refresh', array($this, 'refresh'));
// Plugin actions for other tasks
$this->register_action('plugin.kolab_files', array($this, 'actions'));
// Register task
$this->register_task('files');
// Register plugin task actions
$this->register_action('index', array($this, 'actions'));
$this->register_action('prefs', array($this, 'actions'));
$this->register_action('open', array($this, 'actions'));
$this->register_action('edit', array($this, 'actions'));
$this->register_action('share', array($this, 'actions'));
$this->register_action('autocomplete', array($this, 'autocomplete'));
// we use libkolab::http_request() from libkolab with its configuration
$this->require_plugin('libkolab');
// Load UI from startup hook
$this->add_hook('startup', array($this, 'startup'));
$this->add_hook('preferences_save', array($this, 'preferences_save'));
}
/**
* Creates kolab_files_engine instance
*/
private function engine()
{
if ($this->engine === null) {
// the files module can be enabled/disabled by the kolab_auth plugin
if ($this->rc->config->get('kolab_files_disabled') || !$this->rc->config->get('kolab_files_enabled', true)) {
return $this->engine = false;
}
$this->load_config();
$client_url = $this->rc->config->get('kolab_files_url');
$server_url = $this->rc->config->get('kolab_files_server_url');
if (!$client_url) {
return $this->engine = false;
}
require_once $this->home . '/lib/kolab_files_engine.php';
$this->engine = new kolab_files_engine($this, $client_url, $server_url);
}
return $this->engine;
}
/**
* Startup hook handler, initializes/enables Files UI
*/
public function startup($args)
{
// call this from startup to give a chance to set
// kolab_files_enabled/disabled in kolab_auth plugin
$this->ui();
}
/**
* Adds elements of files API user interface
*/
private function ui()
{
if ($this->rc->output->type != 'html') {
return;
}
if ($engine = $this->engine()) {
$engine->ui();
}
}
/**
* Refresh hook handler
*/
public function refresh($args)
{
// Here we are refreshing API session, so when we need it
// the session will be active
if ($engine = $this->engine()) {
$this->rc->output->set_env('files_token', $engine->get_api_token());
}
return $args;
}
/**
* Engine actions handler
*/
public function actions()
{
if ($engine = $this->engine()) {
$engine->actions();
}
}
/**
* Handler for user autocomplete request
*/
function autocomplete()
{
$this->load_config();
require_once $this->home . '/lib/kolab_files_autocomplete.php';
new kolab_files_autocomplete($this);
}
/**
* Update chwala config on user preferences change
*/
public function preferences_save($props)
{
if ($props['section'] == 'general') {
$dont_override = (array) $this->rc->config->get('dont_override');
$prefs = array();
foreach (array('timezone', 'date_long') as $idx) {
if (isset($props['prefs'][$idx]) && !in_array($idx, $dont_override)) {
$prefs[$idx] = $props['prefs'][$idx];
}
}
if (!empty($prefs) && ($engine = $this->engine())) {
$engine->configure(false, $prefs);
}
}
}
}