* See the enclosed file COPYING for license information (GPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
*
- * @author Michael Slusarz <slusarz@horde.org>
- * @package Gollem
+ * @author Michael Slusarz <slusarz@horde.org>
+ * @category Horde
+ * @license http://www.fsf.org/copyleft/gpl.html GPL
+ * @package Gollem
*/
require_once dirname(__FILE__) . '/lib/Application.php';
$dir = Horde_Util::getFormData('dir');
-$title = _("Clipboard");
-Horde::addScriptFile('tables.js', 'horde');
-require GOLLEM_TEMPLATES . '/common-header.inc';
-Gollem::menu();
-Gollem::status();
-
-$entry = array();
-foreach ($_SESSION['gollem']['clipboard'] as $key => $val) {
- $entry[] = array(
- 'copy' => ($val['action'] == 'copy'),
- 'cut' => ($val['action'] == 'cut'),
- 'id' => $key,
- 'name' => $val['display']
- );
-}
-
/* Set up the template object. */
$template = $injector->createInstance('Horde_Template');
$template->setOption('gettext', true);
$template->set('copygraphic', Horde::img('copy.png', _("Copy")));
$template->set('currdir', Gollem::getDisplayPath($dir));
$template->set('dir', $dir);
-$template->set('entry', $entry, true);
$template->set('manager_url', Horde::url('manager.php'));
+$entry = array();
+foreach ($_SESSION['gollem']['clipboard'] as $key => $val) {
+ $entry[] = array(
+ 'copy' => ($val['action'] == 'copy'),
+ 'cut' => ($val['action'] == 'cut'),
+ 'id' => $key,
+ 'name' => $val['display']
+ );
+}
+$template->set('entry', $entry, true);
+
+$title = _("Clipboard");
+Horde::addScriptFile('tables.js', 'horde');
+Gollem::prepareMenu();
+require GOLLEM_TEMPLATES . '/common-header.inc';
+Gollem::menu();
+Gollem::status();
echo $template->fetch(GOLLEM_TEMPLATES . '/clipboard/clipboard.html');
require $registry->get('templates', 'horde') . '/common-footer.inc';
<?php
/**
- * This file is where you specify what backends people using your
- * installation of Gollem can log in to. There are a number of properties
- * that you can set for each backend:
+ * This file specifies which tbackends people using your installation can
+ * log in to.
*
- * name: This is the plaintext name that you want displayed if you are using
- * the drop down server list.
+ * Properties that can be set for each server:
*
- * driver: The VFS (Virtual File System) driver to use to connect.
- * Valid options:
- * 'file' -- Work with a local file system.
- * 'ftp' -- Connect to a FTP server.
- * 'smb' -- Connect to a SMB fileshare.
- * 'sql' -- Connect to VFS filesystem stored in SQL database.
- * 'ssh2' -- Connect to a remote server via SSH2.
+ * name: (string) This is the name displayed in the server list on the login
+ * screen.
*
- * preferred: This is only useful if you want to use the same backend.php
- * file for different machines: if the hostname of the Gollem
- * machine is identical to one of those in the preferred list,
- * then the corresponding option in the select box will include
- * SELECTED, i.e. it is selected by default. Otherwise the
- * first entry in the list is selected.
+ * driver: (string) The VFS (Virtual File System) driver to use. Choose from:
+ * file - Work with a local file system.
+ * TODO: params
+ * ftp - Connect to a FTP server.
+ * TODO: params
+ * smb - Connect to a SMB fileshare.
+ * TODO: params
+ * sql - Connect to VFS filesystem stored in SQL database.
+ * TODO: params
+ * ssh2 - Connect to a remote server via SSH2.
+ * TODO: params
*
- * hordeauth: If this parameter is present and true, then Gollem will attempt
- * to use the user's existing credentials (the username/password
- * they used to log in to Horde) to log in to this source. If this
- * parameter is 'full', the username will be used unmodified;
- * otherwise, everything after and including the first @ in the
- * username will be stripped before attempting authentication.
- *
- * params: A parameters array containing any additional information that the
- * VFS driver needs.
+ * hordeauth: (mixed) One of the following values:
+ * true - IMP will attempt to use the user's existing credentials
+ * (the username/password they used to log in to Horde) to
+ * login to this source.
+ * false - Everything after and including the first @ in the
+ * username will be stripped off before attempting
+ * authentication. (DEFAULT)
+ * 'full' - The username will be used unmodified.
*
* loginparams: A list of parameters that can be changed by the user on the
* login screen. The key is the parameter name that can be
* changed, the value is the text that will be displayed next to
* the entry box on the login screen.
*
- * root: The directory that will be the "top" or "root" directory, being the
- * topmost directory where users can change to. This is in addition to
- * a vfsroot parameter set in the params array.
+ * root: (string) The directory that will be the "top" or "root" directory,
+ * being the topmost directory where users can change to. This is in
+ addition to a vfsroot parameter set in the params array.
*
- * home: The directory that will be used as home directory for the user.
- * This parameter will overrule a home parameter in the params array.
+ * home: (string) The directory that will be used as home directory for the
+ * user. This parameter will overrule a home parameter in the params.
* If empty, this will default to the active working directory
* immediately after logging into the VFS backend (i.e. for ftp,
* this will most likely be ~user, for SQL based VFS backends,
* this will probably be the root directory).
*
- * createhome: If this parameter is set to true, and the home directory does
- * not exist, attempt to create the home directory on login.
+ * createhome: (boolean) If this parameter is set to true, and the home
+ * directory does not exist, attempt to create the home directory
+ * on login.
*
* filter: If set, all files that match the regex will be hidden in the
- * folder view. The regex must be in pcre syntax (See
+ * folder view. The regex must be in PCRE syntax (See
* http://www.php.net/pcre).
*
* quota: If set, turn on VFS quota checking for the backend if it supports
* Examples: "2 MB", "2048 B", "1.5 GB"
* If false or not set, quota support is disabled.
*
- * ** For quotas to work, you must be using a version of Horde **
- * ** that contains VFS quota support. **
- *
- * clipboard: If set, allows the user to cut/copy/paste files. Since not all
- * VFS backends have support for the necessary commands, and there
- * is no way to auto-detect which backends do have support, this
- * option must be manually set. True enables clipboard support,
- * false (the default) disables support. In the examples below,
- * clipboard has been enabled in all VFS backends that have
- * cut/copy/paste support since the initial release of Horde 3.0.
- * For all other backends, you will have to manually check and
- * see if your current VFS version/backend supports the necessary
- * commands.
+ * clipboard: (boolean) If true, allows the user to cut/copy/paste files.
+ * TODO: Can this be auto-determined?
*
- * attributes: The list of attributes that the driver supports. Available
- * attributes:
+ * attributes: (array) The list of attributes that the driver supports.
+ * Available attributes:
* 'edit'
* 'download'
* 'group'
* 'size'
* 'type'
*
+ *
+ * *** The following options should NOT be set unless you REALLY know what ***
+ * *** you are doing! FOR MOST PEOPLE, AUTO-DETECTION OF THESE PARAMETERS ***
+ * *** (the default if the parameters are not set) SHOULD BE USED! ***
+ *
+ * preferred: (string | array) Useful if you want to use the same servers.php
+ * file for different machines. If the hostname of the IMP machine
+ * is identical to one of those in the preferred list, then that
+ * entry will be selected by default on the login screen. Otherwise
+ * the first entry in the list is selected.
+ *
* $Id$
*/
// IDs from the local password file. This is useful only if the FTP
// server is running on localhost or if the local user/group
// IDs are identical to the remote FTP server.
- // You must be running a version of Horde >= 3.1 for this parameter to
- // have any effect.
// 'maplocalids' => true,
// The default permissions to set for newly created folders and files.
// 'permissions' => '750'
);
// SMB Example
-// ** For the SMB backend to work, you must be using a version of Horde
-// ** that contains the SMB VFS driver. See the test.php script to determine
-// ** whether the SMB driver is present on your system.
-// $backends['smb'] = array(
-// 'name' => 'SMB Server',
-// 'driver' => 'smb',
-// 'preferred' => '',
-// 'hordeauth' => false,
-// 'params' => array(
-// 'hostspec' => 'example',
-// 'port' => 139,
-// 'share' => 'homes',
-// // Path to the smbclient executable.
-// 'smbclient' => '/usr/bin/smbclient',
-// // IP address of server (only needed if hostname is different from
-// // NetBIOS name).
-// // 'ipaddress' => '127.0.0.1',
-// // The default permissions to set for newly created folders and
-// // files.
-// // 'permissions' => '750'
-// ),
-// 'loginparams' => array(
-// // Allow the user to change to Samba server.
-// // 'hostspec' => 'Hostname',
-// // Allow the user to change the Samba port.
-// // 'port' => 'Port',
-// // Allow the user to change the Samba share.
-// // 'share' => 'Share',
-// ),
-// // 'root' => '',
-// // 'home' => '',
-// // 'createhome' => false,
-// // 'filter' => '^regex$',
-// // 'quota' => false,
-// 'clipboard' => true,
-// 'attributes' => array('type', 'name', 'edit', 'download', 'modified', 'size')
-// );
+$backends['smb'] = array(
+ 'name' => 'SMB Server',
+ 'driver' => 'smb',
+ 'preferred' => '',
+ 'hordeauth' => false,
+ 'params' => array(
+ 'hostspec' => 'example',
+ 'port' => 139,
+ 'share' => 'homes',
+ // Path to the smbclient executable.
+ 'smbclient' => '/usr/bin/smbclient',
+ // IP address of server (only needed if hostname is different from
+ // NetBIOS name).
+ // 'ipaddress' => '127.0.0.1',
+ // The default permissions to set for newly created folders and
+ // files.
+ // 'permissions' => '750'
+ ),
+ 'loginparams' => array(
+ // Allow the user to change to Samba server.
+ // 'hostspec' => 'Hostname',
+ // Allow the user to change the Samba port.
+ // 'port' => 'Port',
+ // Allow the user to change the Samba share.
+ // 'share' => 'Share',
+ ),
+ // 'root' => '',
+ // 'home' => '',
+ // 'createhome' => false,
+ // 'filter' => '^regex$',
+ // 'quota' => false,
+ 'clipboard' => true,
+ 'attributes' => array('type', 'name', 'edit', 'download', 'modified', 'size')
+);
// SSH2 Example
-// ** For the SSH2 backend to work, you must be using a version of Horde
-// ** that contains the SSH2 VFS driver. See the test.php script to determine
-// ** whether the SSH2 driver is present on your system.
-// $backends['ssh2'] = array(
-// 'name' => 'SSH2 Server',
-// 'driver' => 'ssh2',
-// 'preferred' => '',
-// 'hordeauth' => false,
-// 'params' => array(
-// // The hostname/IP Address of the SSH server
-// 'hostspec' => 'ssh2.example.com',
-// // The port number of the SSH server
-// 'port' => 22,
-// // Set timeout (in seconds) for the SSH server. Default: 90 seconds
-// // 'timeout' => 90,
-// // If true and the POSIX extension is available the driver will map
-// // the user and group IDs returned from the SSH server with the local
-// // IDs from the local password file. This is useful only if the SSH
-// // server is running on localhost or if the local user/group
-// // IDs are identical to the remote SSH server.
-// // 'maplocalids' => true,
-// // The default permissions to set for newly created folders and
-// // files.
-// // 'permissions' => '750'
-// ),
-// 'loginparams' => array(
-// // Allow the user to change the SSH server
-// // 'hostspec' => 'Hostname',
-// // Allow the user to change the SSH port
-// // 'port' => 'Port'
-// ),
-// // 'root' => '',
-// // 'home' => '',
-// // 'createhome' => false,
-// // 'filter' => '^regex$',
-// // 'quota' => false,
-// 'clipboard' => true,
-// 'attributes' => array('type', 'name', 'edit', 'download', 'modified', 'size', 'permission', 'owner', 'group')
-// );
+$backends['ssh2'] = array(
+ 'name' => 'SSH2 Server',
+ 'driver' => 'ssh2',
+ 'preferred' => '',
+ 'hordeauth' => false,
+ 'params' => array(
+ // The hostname/IP Address of the SSH server
+ 'hostspec' => 'ssh2.example.com',
+ // The port number of the SSH server
+ 'port' => 22,
+ // Set timeout (in seconds) for the SSH server. Default: 90 seconds
+ // 'timeout' => 90,
+ // If true and the POSIX extension is available the driver will map
+ // the user and group IDs returned from the SSH server with the local
+ // IDs from the local password file. This is useful only if the SSH
+ // server is running on localhost or if the local user/group
+ // IDs are identical to the remote SSH server.
+ // 'maplocalids' => true,
+ // The default permissions to set for newly created folders and
+ // files.
+ // 'permissions' => '750'
+ ),
+ 'loginparams' => array(
+ // Allow the user to change the SSH server
+ // 'hostspec' => 'Hostname',
+ // Allow the user to change the SSH port
+ // 'port' => 'Port'
+ ),
+ // 'root' => '',
+ // 'home' => '',
+ // 'createhome' => false,
+ // 'filter' => '^regex$',
+ // 'quota' => false,
+ 'clipboard' => true,
+ 'attributes' => array('type', 'name', 'edit', 'download', 'modified', 'size', 'permission', 'owner', 'group')
+);
If it is 'shown', the user will be able to pick from any of the
options.">none
<values>
- <value>none</value>
- <value>hidden</value>
- <value>shown</value>
+ <value desc="None">none</value>
+ <value desc="Hidden">hidden</value>
+ <value desc="Shown">shown</value>
</values>
</configenum>
</configsection>
+++ /dev/null
-<?php
-/**
- * Gollem Credentials File
- *
- * This file contains the credentials that Gollem understands and
- * might have to pass to a VFS backend. It may be safely edited by
- * hand. Use credentials.php.dist as a reference.
- *
- * General configuration is in 'conf.php'.
- * File stores are defined in 'backends.php'.
- * Default user preferences are defined in 'prefs.php'.
- *
- * $Id$
- */
-
-$credentials['username'] = array(
- 'type' => 'text',
- 'desc' => _("Username")
-);
-
-$credentials['password'] = array(
- 'type' => 'password',
- 'desc' => _("Password")
-);
-
-$credentials['email'] = array(
- 'type' => 'email',
- 'desc' => _("Email")
-);
* $Id$
*/
+// *** File Display Preferences ***
+
$prefGroups['display'] = array(
'column' => _("User Interface"),
'label' => _("File Display"),
- 'desc' => _("Change your file sorting options."),
+ 'desc' => _("File display options."),
'members' => array(
'show_dotfiles', 'sortdirsfirst', 'columnselect', 'sortby', 'sortdir',
'perpage'
)
);
-$prefGroups['settings'] = array(
- 'column' => _("User Interface"),
- 'label' => _("Settings"),
- 'desc' => _("Change file and folder handling settings."),
- 'members' => array('recursive_deletes'));
-
// show dotfiles?
$_prefs['show_dotfiles'] = array(
- 'value' => 1,
+ 'value' => 0,
'type' => 'checkbox',
'desc' => _("Show dotfiles?")
);
+// always sort directories before files
+$_prefs['sortdirsfirst'] = array(
+ 'value' => 1,
+ 'type' => 'checkbox',
+ 'desc' => _("List folders first?")
+);
+
// columns selection widget
$_prefs['columnselect'] = array(
'type' => 'special'
// columns to be displayed
$_prefs['columns'] = array(
- 'value' => "ftp\ttype\tname\tdownload\tmodified\tsize\tpermission\towner\tgroup"
+ // 'value' = json_encode(array())
+ 'value' => '["ftp","type","name","download","modified","size","permission","owner","group"]'
);
+
// user preferred sorting column
$_prefs['sortby'] = array(
'value' => Gollem::SORT_TYPE,
'desc' => _("Default sorting direction:")
);
-// always sort directories before files
-$_prefs['sortdirsfirst'] = array(
- 'value' => 0,
- 'type' => 'checkbox',
- 'desc' => _("List folders first?")
-);
-
// number of items per page
$_prefs['perpage'] = array(
- 'value' => 20,
+ 'value' => 30,
'type' => 'number',
'desc' => _("Items per page")
);
+
+
+// *** File Actions Preferences ***
+
+$prefGroups['settings'] = array(
+ 'column' => _("User Interface"),
+ 'label' => _("File Actions"),
+ 'desc' => _("File action settings."),
+ 'members' => array('recursive_deletes'));
+
// user preferred recursive deletes
$_prefs['recursive_deletes'] = array(
'value' => 'disabled',
v2.0-git
--------
-
+[mms] Convert to use H4.
----------
for Web applications written in PHP. You must install Horde before
before installing Gollem.
- .. Important:: Gollem 2.0 requires version 4.0 of the Horde Framework -
+ .. Important:: Gollem 2 requires version 4 of the Horde Framework -
earlier versions of Horde will **not** work.
The Horde Framework can be obtained from the Horde website and FTP server,
* See the enclosed file COPYING for license information (GPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
*
- * @author Jan Schneider <jan@horde.org>
- * @package Gollem
+ * @author Jan Schneider <jan@horde.org>
+ * @category Horde
+ * @license http://www.fsf.org/copyleft/gpl.html GPL
+ * @package Gollem
*/
require_once dirname(__FILE__) . '/lib/Application.php';
Horde_Registry::appInit('gollem');
-$actionID = Horde_Util::getFormData('actionID');
-$driver = Horde_Util::getFormData('driver');
-$filedir = Horde_Util::getFormData('dir');
-$filename = Horde_Util::getFormData('file');
-$type = Horde_Util::getFormData('type');
+$vars = Horde_Variables::getDefaultVariables();
-if ($driver != $GLOBALS['gollem_be']['driver']) {
+if ($vars->driver != $GLOBALS['gollem_be']['driver']) {
echo Horde::wrapInlineScript(array('window.close();'));
exit;
}
/* Run through action handlers. */
-switch ($actionID) {
+switch ($vars->actionID) {
case 'save_file':
- $data = Horde_Util::getFormData('content');
- $result = $gollem_vfs->writeData($filedir, $filename, $data);
- if (is_a($result, 'PEAR_Error')) {
- $message = sprintf(_("Access denied to %s"), $filename);
- } else {
- $message = sprintf(_("%s successfully saved."), $filename);
+ try {
+ $gollem_vfs->writeData($vars->filedir, $vars->filename, $vars->content);
+ $message = sprintf(_("%s successfully saved."), $vars->filename);
+ } catch (VFS_Exception $e) {
+ $message = sprintf(_("Access denied to %s"), $vars->filename);
}
echo Horde::wrapInlineScript(array(
- 'alert("' . addslashes($message) . '");',
- 'window.close();'
+ 'alert("' . addslashes($message) . '")'
));
- exit;
+ break;
case 'edit_file':
- $data = $gollem_vfs->read($filedir, $filename);
- if (is_a($data, 'PEAR_Error')) {
+ try {
+ $data = $gollem_vfs->read($vars->filedir, $vars->filename);
+ } catch (VFS_Exception $e) {
echo Horde::wrapInlineScript(array(
- 'alert("' . addslashes(sprintf(_("Access denied to %s"), $filename)) . '");',
- 'window.close();'
+ 'alert("' . addslashes(sprintf(_("Access denied to %s"), $vars->filename)) . '")'
));
- exit;
+ break;
}
- $mime_type = Horde_Mime_Magic::extToMIME($type);
+
+ $mime_type = Horde_Mime_Magic::extToMIME($vars->type);
if (strpos($mime_type, 'text/') !== 0) {
- echo Horde::wrapInlineScript(array('window.close();'));
+ break;
}
+
if ($mime_type == 'text/html') {
$injector->getInstance('Horde_Editor')->getEditor('ckeditor', array('id' => 'content'));
}
exit;
}
-wcho Horde::wrapInlineScript(array('window.close();'));
+echo Horde::wrapInlineScript(array('window.close()'));
* See the enclosed file COPYING for license information (GPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
*
- * @author Max Kalika <max@horde.org>
- * @author Chuck Hagenbuch <chuck@horde.org>
- * @package Gollem
+ * @author Max Kalika <max@horde.org>
+ * @author Chuck Hagenbuch <chuck@horde.org>
+ * @category Horde
+ * @license http://www.fsf.org/copyleft/gpl.html GPL
+ * @package Gollem
*/
require dirname(__FILE__) . '/manager.php';
/**
* Gollem external API interface.
*
- * This file defines Gollem's external API interface. Other
- * applications can interact with Gollem through this API.
+ * This file defines Gollem's external API interface. Other applications
+ * can interact with Gollem through this API.
*
- * @author Amith Varghese <amith@xalan.com>
- * @author Michael Slusarz <slusarz@horde.org>
- * @author Ben Klang <bklang@alkaloid.net>
- * @package Gollem
+ * Copyright 2010 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @author Amith Varghese <amith@xalan.com>
+ * @author Michael Slusarz <slusarz@horde.org>
+ * @author Ben Klang <bklang@alkaloid.net>
+ * @category Horde
+ * @license http://www.fsf.org/copyleft/gpl.html GPL
+ * @package Gollem
*/
class Gollem_Api extends Horde_Registry_Api
{
* operations are allowed outside any VFS area.
*
* @param string $path The level of the tree to browse.
- * @param array $properties The item properties to return. Defaults to 'name',
- * 'icon', and 'browseable'.
+ * @param array $properties The item properties to return. Defaults to
+ * 'name', 'icon', and 'browseable'.
*
* @return array The contents of $path.
+ * @throws Gollem_Exception
*/
- public function browse($path = '', $properties = array())
+ public function browse($path = '',
+ $properties = array('name', 'icon' ,'browseable'))
{
$path = Gollem::stripAPIPath($path);
-
- // Default properties.
- if (!$properties) {
- $properties = array('name', 'icon', 'browseable');
- }
-
$results = array();
+
if ($path == '') {
// We are at the root of gollem. Return a set of folders, one for
// each backend available.
}
}
} else {
- // A file or directory has been requested.
-
- // Locate the backend_key in the path.
- if (strchr($path, '/')) {
- $backend_key = substr($path, 0, strpos($path, '/'));
- } else {
- $backend_key = $path;
- }
-
- // Validate and perform permissions checks on the requested backend
- if (!isset($backends[$backend_key])) {
- return PEAR::raiseError(sprintf(_("Invalid backend requested: %s"), $backend_key));
- }
- //if (!Gollem::canAutoLogin($backend_key)) {
- // // FIXME: Is it possible to request secondary authentication
- // // credentials here for backends that require it?
- // return PEAR::raiseError(_("Additional authentication required."));
- //}
- if (!Gollem_Session::createSession($backend_key)) {
- return PEAR::raiseError(_("Unable to create Gollem session"));
- }
- if (!Gollem::checkPermissions('backend', Horde_Perms::READ)) {
- return PEAR::raiseError(_("Permission denied to this backend."));
- }
+ $backend_key = $this->_getBackend($path);
// Trim off the backend_key (and '/') to get the VFS relative path
$fullpath = substr($path, strlen($backend_key) + 1);
if ($GLOBALS['gollem_vfs']->isFolder($path, $name)) {
// This is a folder request. Return a directory listing.
$list = Gollem::listFolder($path . '/' . $name);
- if (is_a($list, 'PEAR_Error')) {
- return $list;
- }
// Iterate over the directory contents
if (is_array($list) && count($list)) {
}
} else {
// A file has been requested. Return the contents of the file.
-
// Get the file meta-data
$list = Gollem::listFolder($path);
$i = false;
return $i;
}
- // Read the file contents
- $data = $GLOBALS['gollem_vfs']->read($path, $name);
- if (is_a($data, 'PEAR_Error')) {
- return false;
- }
-
// Send the file
$results['name'] = $name;
- $results['data'] = $data;
+ $results['data'] = $GLOBALS['gollem_vfs']->read($path, $name);
$results['contentlength'] = $list[$i]['size'];
$results['mtime'] = $list[$i]['date'];
}
}
/**
- * Accepts a file for storage into the VFS
+ * Accepts a file for storage into the VFS.
*
- * @param string $path Path to store file
- * @param string $content Contents of file
- * @param string $content_type MIME type of file
+ * @param string $path Path to store file.
+ * @param string $content Contents of file.
+ * @param string $content_type MIME type of file.
*
- * @return mixed True on success; PEAR_Error on failure
+ * @throws Gollem_Exception
*/
public function put($path, $content, $content_type)
{
if ($path == '') {
// We are at the root of gollem. Any writes at this level are
// disallowed.
- return PEAR::raiseError(_("Files must be written inside a VFS backend."));
- } else {
- // We must be inside one of the VFS areas. Determine which one.
- // Locate the backend_key in the path
- if (strchr($path, '/')) {
- $backend_key = substr($path, 0, strpos($path, '/'));
- } else {
- $backend_key = $path;
- }
+ throw new Gollem_Exception(_("Files must be written inside a VFS backend."));
+ }
- // Validate and perform permissions checks on the requested backend
- if (!isset($backends[$backend_key])) {
- return PEAR::raiseError(sprintf(_("Invalid backend requested: %s"), $backend_key));
- }
- //if (!Gollem::canAutoLogin($backend_key)) {
- // // FIXME: Is it possible to request secondary authentication
- // // credentials here for backends that require it?
- // return PEAR::raiseError(_("Additional authentication required."));
- //}
- if (!Gollem_Session::createSession($backend_key)) {
- return PEAR::raiseError(_("Unable to create Gollem session"));
- }
- if (!Gollem::checkPermissions('backend', Horde_Perms::EDIT)) {
- return PEAR::raiseError(_("Permission denied to this backend."));
- }
+ $backend_key = $this->_getBackend($path);
- // Trim off the backend_key (and '/') to get the VFS relative path
- $fullpath = substr($path, strlen($backend_key) + 1);
+ // Trim off the backend_key (and '/') to get the VFS relative path
+ $fullpath = substr($path, strlen($backend_key) + 1);
- // Get the VFS-standard $name,$path pair
- list($name, $path) = Gollem::getVFSPath($fullpath);
+ // Get the VFS-standard $name,$path pair
+ list($name, $path) = Gollem::getVFSPath($fullpath);
- return $GLOBALS['gollem_vfs']->writeData($path, $name, $content);
- }
+ return $GLOBALS['gollem_vfs']->writeData($path, $name, $content);
}
/**
*
* @param string $path Path of directory to create
*
- * @return mixed True on success; PEAR_Error on failure
+ * @throws Gollem_Exception
*/
public function mkcol($path)
{
if ($path == '') {
// We are at the root of gollem. Any writes at this level are
// disallowed.
- return PEAR::raiseError(_('Folders must be created inside a VFS backend.'));
- } else {
- // We must be inside one of the VFS areas. Determine which one.
- // Locate the backend_key in the path
- if (!strchr($path, '/')) {
- // Disallow attempts to create a share-level directory.
- return PEAR::raiseError(_('Folders must be created inside a VFS backend.'));
- } else {
- $backend_key = substr($path, 0, strpos($path, '/'));
- }
+ throw new Gollem_Exception(_('Folders must be created inside a VFS backend.'));
+ }
- // Validate and perform permissions checks on the requested backend
- if (!isset($backends[$backend_key])) {
- return PEAR::raiseError(sprintf(_("Invalid backend requested: %s"), $backend_key));
- }
- //if (!Gollem::canAutoLogin($backend_key)) {
- // // FIXME: Is it possible to request secondary authentication
- // // credentials here for backends that require it?
- // return PEAR::raiseError(_("Additional authentication required."));
- //}
- if (!Gollem_Session::createSession($backend_key)) {
- return PEAR::raiseError(_("Unable to create Gollem session"));
- }
- if (!Gollem::checkPermissions('backend', Horde_Perms::EDIT)) {
- return PEAR::raiseError(_("Permission denied to this backend."));
- }
+ $backend_key = $this->_getBackend($path);
- // Trim off the backend_key (and '/') to get the VFS relative path
- $fullpath = substr($path, strlen($backend_key) + 1);
+ // Trim off the backend_key (and '/') to get the VFS relative path
+ $fullpath = substr($path, strlen($backend_key) + 1);
- // Get the VFS-standard $name,$path pair
- list($name, $path) = Gollem::getVFSPath($fullpath);
+ // Get the VFS-standard $name,$path pair
+ list($name, $path) = Gollem::getVFSPath($fullpath);
- return $GLOBALS['gollem_vfs']->createFolder($path, $name);
- }
+ return $GLOBALS['gollem_vfs']->createFolder($path, $name);
}
/**
*
* @param string $path Path to source object to be renamed
* @param string $dest Path to new name
- *
- * @return mixed True on success; PEAR_Error on failure
*/
public function move($path, $dest)
{
if ($path == '') {
// We are at the root of gollem. Any writes at this level are
// disallowed.
- return PEAR::raiseError(_('Folders must be created inside a VFS backend.'));
- } else {
- // We must be inside one of the VFS areas. Determine which one.
- // Locate the backend_key in the path
- if (!strchr($path, '/')) {
- // Disallow attempts to rename a share-level directory.
- return PEAR::raiseError(_('Renaming of backends is not allowed.'));
- } else {
- $backend_key = substr($path, 0, strpos($path, '/'));
- }
+ throw new Gollem_Exception(_('Folders must be created inside a VFS backend.'));
+ }
- // Ensure that the destination is within the same backend
- if (!strchr($dest, '/')) {
- // Disallow attempts to rename a share-level directory.
- return PEAR::raiseError(_('Renaming of backends is not allowed.'));
- } else {
- $dest_backend_key = substr($path, 0, strpos($path, '/'));
- if ($dest_backend_key != $backend_key) {
- return PEAR::raiseError(_('Renaming across backends is not supported.'));
- }
- }
+ // We must be inside one of the VFS areas. Determine which one.
+ // Locate the backend_key in the path
+ if (!strchr($path, '/') ||
+ !strchr($dest, '/')) {
+ // Disallow attempts to rename a share-level directory.
+ throw new Gollem_Exception(_('Renaming of backends is not allowed.'));
+ }
- // Validate and perform permissions checks on the requested backend
- if (!isset($backends[$backend_key])) {
- return PEAR::raiseError(sprintf(_("Invalid backend requested: %s"), $backend_key));
- }
- //if (!Gollem::canAutoLogin($backend_key)) {
- // // FIXME: Is it possible to request secondary authentication
- // // credentials here for backends that require it?
- // return PEAR::raiseError(_("Additional authentication required."));
- //}
- if (!Gollem_Session::createSession($backend_key)) {
- return PEAR::raiseError(_("Unable to create Gollem session"));
- }
- if (!Gollem::checkPermissions('backend', Horde_Perms::EDIT)) {
- return PEAR::raiseError(_("Permission denied to this backend."));
- }
+ $backend_key = $this->_getBackend($path);
+ $dest_backend_key = substr($path, 0, strpos($path, '/'));
+ if ($dest_backend_key != $backend_key) {
+ throw new Gollem_Exception(_('Renaming across backends is not supported.'));
+ }
- // Trim off the backend_key (and '/') to get the VFS relative path
- $srcfullpath = substr($path, strlen($backend_key) + 1);
- $dstfullpath = substr($dest, strlen($backend_key) + 1);
+ // Trim off the backend_key (and '/') to get the VFS relative path
+ $srcfullpath = substr($path, strlen($backend_key) + 1);
+ $dstfullpath = substr($dest, strlen($backend_key) + 1);
- // Get the VFS-standard $name,$path pair
- list($srcname, $srcpath) = Gollem::getVFSPath($srcfullpath);
- list($dstname, $dstpath) = Gollem::getVFSPath($dstfullpath);
+ // Get the VFS-standard $name,$path pair
+ list($srcname, $srcpath) = Gollem::getVFSPath($srcfullpath);
+ list($dstname, $dstpath) = Gollem::getVFSPath($dstfullpath);
- return $GLOBALS['gollem_vfs']->rename($srcpath, $srcname, $dstpath, $dstname);
- }
+ $GLOBALS['gollem_vfs']->rename($srcpath, $srcname, $dstpath, $dstname);
}
/**
* Removes a file or folder from the VFS
*
* @param string $path Path of file or folder to delete
- *
- * @return mixed True on success; PEAR_Error on failure
*/
public function path_delete($path)
{
if ($path == '') {
// We are at the root of gollem. Any writes at this level are
// disallowed.
- return PEAR::raiseError(_("The application folder can not be deleted."));
- } else {
- // We must be inside one of the VFS areas. Determine which one.
- // Locate the backend_key in the path
- if (strchr($path, '/')) {
- $backend_key = substr($path, 0, strpos($path, '/'));
- } else {
- $backend_key = $path;
- }
+ throw new Gollem_Exception(_("The application folder can not be deleted."));
+ }
- // Validate and perform permissions checks on the requested backend
- if (!isset($backends[$backend_key])) {
- return PEAR::raiseError(sprintf(_("Invalid backend requested: %s"), $backend_key));
- }
- //if (!Gollem::canAutoLogin($backend_key)) {
- // // FIXME: Is it possible to request secondary authentication
- // // credentials here for backends that require it?
- // return PEAR::raiseError(_("Additional authentication required."));
- //}
- if (!Gollem_Session::createSession($backend_key)) {
- return PEAR::raiseError(_("Unable to create Gollem session"));
- }
- if (!Gollem::checkPermissions('backend', Horde_Perms::EDIT)) {
- return PEAR::raiseError(_("Permission denied to this backend."));
- }
+ $backend_key = $this->_getBackend($path);
- // Trim off the backend_key (and '/') to get the VFS relative path
- $fullpath = substr($path, strlen($backend_key) + 1);
+ // Trim off the backend_key (and '/') to get the VFS relative path
+ $fullpath = substr($path, strlen($backend_key) + 1);
- // Get the VFS-standard $name,$path pair
- list($name, $path) = Gollem::getVFSPath($fullpath);
+ // Get the VFS-standard $name,$path pair
+ list($name, $path) = Gollem::getVFSPath($fullpath);
- // Apparently Gollem::verifyDir() (called by deleteF* next) needs to
- // see a path with a leading '/'
- $path = $backends[$backend_key]['root'] . $path;
- if ($GLOBALS['gollem_vfs']->isFolder($path, $name)) {
- return Gollem::deleteFolder($path, $name);
- } else {
- return Gollem::deleteFile($path, $name);
- }
- }
+ // Apparently Gollem::verifyDir() (called by deleteF* next) needs to
+ // see a path with a leading '/'
+ $path = $backends[$backend_key]['root'] . $path;
+
+ $GLOBALS['gollem_vfs']->isFolder($path, $name)
+ ? Gollem::deleteFolder($path, $name)
+ : Gollem::deleteFile($path, $name);
}
/**
*
* @param string $dir File absolute path
* @param string $file File basename
- * @param string $backend Backend key. Defaults to Gollem::getPreferredBackend()
+ * @param string $backend Backend key. Defaults to
+ * Gollem::getPreferredBackend().
*
- * @return string The URL string.
+ * @return Horde_Url The URL object.
*/
public function getViewLink($dir, $file, $backend = '')
{
$backend = Gollem::getPreferredBackend();
}
- $url = Horde_Util::addParameter(
- Horde::url('view.php'),
- array('actionID' => 'view_file',
- 'type' => substr($file, strrpos($file, '.') + 1),
- 'file' => $file,
+ return Horde::url('view.php')->add(array(
+ 'actionID' => 'view_file',
'dir' => $dir,
- 'driver' => $_SESSION['gollem']['backends'][$backend]['driver']));
-
- return $url;
+ 'driver' => $_SESSION['gollem']['backends'][$backend]['driver'],
+ 'file' => $file,
+ 'type' => substr($file, strrpos($file, '.') + 1)
+ ));
}
/**
* Creates a link to the gollem file selection window.
*
- * The file section window will return a cache ID value which should be used
- * (along with the selectListResults and returnFromSelectList functions below)
- * to obtain the data from a list of selected files.
+ * The file section window will return a cache ID value which should be
+ * used (along with the selectListResults and returnFromSelectList
+ * functions below) to obtain the data from a list of selected files.
*
* There MUST be a form field named 'selectlist_selectid' in the calling
* form. This field will be populated with the selection ID when the user
* @param string $link_text The text to use in the link.
* @param string $link_style The style to use for the link.
* @param string $formid The formid of the calling script.
- * @param boolean $icon Create the link with an icon instead of text?
+ * @param boolean $icon Create the link with an icon instead of
+ * text?
* @param string $selectid Selection ID.
*
* @return string The URL string.
*
* @param string $selectid The selection ID.
*
- * @param array An array with each file entry stored in its own array, with
- * the key as the directory name and the value as the filename.
+ * @param array An array with each file entry stored in its own array,
+ * with the key as the directory name and the value as the
+ * filename.
*/
public function selectlistResults($selectid)
{
* Sets the files selected for a given selection ID.
*
* @param string $selectid The selection ID to use.
- * @param array $files An array with each file entry stored in its own
- * array, with the key as the directory name and the
- * value as the filename.
+ * @param array $files An array with each file entry stored in its
+ * own array, with the key as the directory name
+ * and the value as the filename.
*
* @return string The selection ID.
*/
return $selectid;
}
+ /**
+ * @throws Gollem_Exception
+ */
+ protected function _getBackend($path)
+ {
+ // A file or directory has been requested.
+ // Locate the backend_key in the path.
+ $backend_key = strchr($path, '/')
+ ? substr($path, 0, strpos($path, '/'))
+ : $path;
+
+ // Validate and perform permissions checks on the requested backend
+ if (!isset($_SESSION['gollem']['backends'][$backend_key])) {
+ throw new Gollem_Exception(sprintf(_("Invalid backend requested: %s"), $backend_key));
+ }
+
+ if (!Gollem_Session::createSession($backend_key)) {
+ throw new Gollem_Exception(_("Unable to create Gollem session"));
+ }
+
+ if (!Gollem::checkPermissions('backend', Horde_Perms::READ)) {
+ throw new Gollem_Exception(_("Permission denied to this backend."));
+ }
+
+ return $backend_key;
+ }
+
}
* This file defines Horde's core API interface. Other core Horde libraries
* can interact with Horde through this API.
*
+ * Copyright 2010 The Horde Project (http://www.horde.org/)
+ *
* See the enclosed file COPYING for license information (GPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
*
- * @author Amith Varghese <amith@xalan.com>
- * @author Michael Slusarz <slusarz@horde.org>
- * @author Ben Klang <bklang@alkaloid.net>
- * @package Gollem
+ * @author Amith Varghese <amith@xalan.com>
+ * @author Michael Slusarz <slusarz@horde.org>
+ * @author Ben Klang <bklang@alkaloid.net>
+ * @category Horde
+ * @license http://www.fsf.org/copyleft/gpl.html GPL
+ * @package Gollem
*/
/* Determine the base directories. */
public $version = 'H4 (2.0-git)';
/**
- * Permissions cache.
- *
- * @var array
- */
- protected $_permsCache = array();
-
- /**
* Gollem initialization.
*
* Global variables defined:
return $this->_permsCache;
}
- $perms['tree']['gollem']['backends'] = false;
- $perms['title']['gollem:backends'] = _("Backends");
+ $perms = array(
+ 'tree' => array(
+ 'gollem' => array(
+ 'backends' => false
+ )
+ ),
+ 'title' => array(
+ 'gollem:backends' => _("Backends")
+ )
+ );
// Run through every backend.
require GOLLEM_BASE . '/config/backends.php';
$perms['title']['gollem:backends:' . $key] = $val['name'];
}
- $this->_permsCache = $perms;
-
return $perms;
}
{
switch ($item) {
case 'columnselect':
- $cols = Gollem::displayColumns();
+ $cols = json_decode($GLOBALS['prefs']->getValue('columns'));
$sources = array();
foreach ($GLOBALS['gollem_backends'] as $source => $info) {
}
/**
- * Special preferences handling on update.
- *
- * @param Horde_Core_Prefs_Ui $ui The UI object.
- * @param string $item The preference name.
- *
- * @return boolean True if preference was updated.
- */
- public function prefsSpecialUpdate($ui, $item)
- {
- switch ($item) {
- case 'columnselect':
- if (isset($ui->vars->sources)) {
- $pref = array();
- foreach (Horde_Serialize::unserialize($ui->vars->sources, Horde_Serialize::JSON) as $val) {
- $pref[] = implode("\t", array_merge($val[0], $val[1]));
- }
- $GLOBALS['prefs']->setValue('columns', implode("\n", $pref));
- return true;
- }
- break;
- }
-
- return false;
- }
-
- /**
* Generate the menu to use on the prefs page.
*
* @return Horde_Menu A Horde_Menu object.
--- /dev/null
+<?php
+/**
+ * Base exception class for Gollem.
+ *
+ * Copyright 2010 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @author Michael Slusarz <slusarz@horde.org>
+ * @category Horde
+ * @license http://www.fsf.org/copyleft/gpl.html GPL
+ * @package Gollem
+ */
+class Gollem_Exception extends Horde_Exception_Prior {}
* See the enclosed file COPYING for license information (GPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
*
- * @author Max Kalika <max@horde.org>
- * @author Chuck Hagenbuch <chuck@horde.org>
- * @author Michael Slusarz <slusarz@horde.org>
- * @package Gollem
+ * @author Max Kalika <max@horde.org>
+ * @author Chuck Hagenbuch <chuck@horde.org>
+ * @author Michael Slusarz <slusarz@horde.org>
+ * @category Horde
+ * @license http://www.fsf.org/copyleft/gpl.html GPL
+ * @package Gollem
*/
class Gollem
{
const SORT_DESCEND = 1;
/**
+ * prepareMenu() cache.
+ *
+ * @var array
+ */
+ static private $_menu = null;
+
+ /**
* Changes the current directory of the Gollem session to the supplied
* value.
*
* @param string $dir Directory name.
*
- * @return mixed True on Success, PEAR_Error on failure.
+ * @throws Gollem_Exception
*/
static public function setDir($dir)
{
$dir = Horde_Util::realPath($dir);
if (!self::verifyDir($dir)) {
- return PEAR::raiseError(sprintf(_("Access denied to folder \"%s\"."), $dir));
+ throw new Gollem_Exception(sprintf(_("Access denied to folder \"%s\"."), $dir));
}
$GLOBALS['gollem_be']['dir'] = $dir;
self::_setLabel();
-
- return true;
}
/**
* Changes the current directory of the Gollem session based on the
* 'dir' form field.
*
- * @return mixed True on Success, PEAR_Error on failure.
+ * @throws Gollem_Exception
*/
static public function changeDir()
{
$dir = Horde_Util::getFormData('dir');
- if ($dir !== null) {
+ if (is_null($dir)) {
+ self::_setLabel();
+ } else {
if (strpos($dir, '/') !== 0) {
$dir = $GLOBALS['gollem_be']['dir'] . '/' . $dir;
}
- return self::setDir($dir);
- } else {
- self::_setLabel();
- return true;
+ self::setDir($dir);
}
}
* information, such as username, server, etc., that can be filled
* in on the login form.
*
- * @return string The logout URL with parameters added.
+ * @return Horde_Url The logout URL with parameters added.
*/
static public function logoutUrl()
{
- $params = array();
- $url = 'login.php';
+ $url = Horde::url('login.php', true);
if (!empty($GLOBALS['gollem_be']['params']['username'])) {
- $params['username'] = $GLOBALS['gollem_be']['params']['username'];
+ $url->add('username', $GLOBALS['gollem_be']['params']['username']);
} elseif (Horde_Util::getFormData('username')) {
- $params['username'] = Horde_Util::getFormData('username');
+ $url->add('username', Horde_Util::getFormData('username'));
}
if (!empty($GLOBALS['gollem_be']['params']['port'])) {
- $params['port'] = $GLOBALS['gollem_be']['params']['port'];
+ $url->add('port', $GLOBALS['gollem_be']['params']['port']);
}
- foreach ($params as $key => $val) {
- if (!empty($val)) {
- $url = Horde_Util::addParameter($url, $key, $val);
- }
- }
-
- return Horde::url($url, true);
+ return $url;
}
/**
* @param string $dir The directory path.
* @param string $name The folder to create.
*
- * @return mixed True on success or a PEAR_Error object on failure.
+ * @throws Gollem_Exception
* @throws VFS_Exception
*/
static public function createFolder($dir, $name)
{
$totalpath = Horde_Util::realPath($dir . '/' . $name);
if (!Gollem::verifyDir($totalpath)) {
- return PEAR::raiseError(sprintf(_("Access denied to folder \"%s\"."), $totalpath));
+ throw new Gollem_Exception(sprintf(_("Access denied to folder \"%s\"."), $totalpath));
}
/* The $name parameter may contain additional directories so we
if (!empty($GLOBALS['gollem_be']['params']['permissions'])) {
$GLOBALS['gollem_vfs']->changePermissions($dir, $name, $GLOBALS['gollem_be']['params']['permissions']);
}
-
- return true;
}
/**
* @param string $dir The subdirectory name.
* @param string $name The folder name to delete.
*
+ * @throws Gollem_Exception
* @throws VFS_Exception
*/
static public function deleteFolder($dir, $name)
{
if (!Gollem::verifyDir($dir)) {
- return PEAR::raiseError(sprintf(_("Access denied to folder \"%s\"."), $dir));
+ throw new Gollem_Exception(sprintf(_("Access denied to folder \"%s\"."), $dir));
}
($GLOBALS['prefs']->getValue('recursive_deletes') != 'disabled')
* @param string $dir The directory name.
* @param string $name The filename to delete.
*
+ * @throws Gollem_Exception
* @throws VFS_Exception
*/
static public function deleteFile($dir, $name)
{
if (!Gollem::verifyDir($dir)) {
- return PEAR::raiseError(sprintf(_("Access denied to folder \"%s\"."), $dir));
+ throw new Gollem_Exception(sprintf(_("Access denied to folder \"%s\"."), $dir));
}
$GLOBALS['gollem_vfs']->deleteFile($dir, $name);
}
* @param string $name The filename to change permissions on.
* @param string $permission The permission mode to set.
*
+ * @throws Gollem_Exception
* @throws VFS_Exception
*/
static public function changePermissions($dir, $name, $permission)
{
if (!Gollem::verifyDir($dir)) {
- return PEAR::raiseError(sprintf(_("Access denied to folder \"%s\"."), $dir));
+ throw new Gollem_Exception(sprintf(_("Access denied to folder \"%s\"."), $dir));
}
$GLOBALS['gollem_vfs']->changePermissions($dir, $name, $permission);
}
return (Horde_String::substr(Horde_Util::realPath($dir), 0, Horde_String::length($rootdir)) == $rootdir);
}
-
- /**
- * Parse the 'columns' preference.
- *
- * @return array The list of columns to be displayed.
- */
- static public function displayColumns()
- {
- $ret = array();
- $lines = explode("\n", $GLOBALS['prefs']->getValue('columns'));
- foreach ($lines as $line) {
- $line = trim($line);
- if (!empty($line)) {
- $columns = explode("\t", $line);
- if (count($columns) > 1) {
- $source = array_splice($columns, 0, 1);
- $ret[$source[0]] = $columns;
- }
- }
- }
-
- return $ret;
- }
-
/**
* Checks if a user has the specified permissions on the selected backend.
*
* @return boolean Returns true if the user has permission, false if
* they do not.
*/
- static public function checkPermissions($filter, $permission = Horde_Perms::READ,
+ static public function checkPermissions($filter,
+ $permission = Horde_Perms::READ,
$backend = null)
{
$userID = $GLOBALS['registry']->getAuth();
- if ($backend === null) {
+ if (is_null($backend)) {
$backend = $_SESSION['gollem']['backend_key'];
}
$parts = explode('/', $currdir);
$parts_count = count($parts);
- $label[] = Horde::link(Horde_Util::addParameter($url, 'dir', $root_dir), sprintf(_("Up to %s"), $root_dir_name)) . '[' . $root_dir_name . ']</a>';
+ $url = new Horde_Url($url);
+ $label[] = Horde::link($url->add('dir', $root_dir), sprintf(_("Up to %s"), $root_dir_name)) . '[' . $root_dir_name . ']</a>';
- for ($i = 1; $i <= $parts_count; $i++) {
+ for ($i = 1; $i <= $parts_count; ++$i) {
$part = array_slice($parts, 0, $i);
$dir = implode('/', $part);
if ((strstr($dir, $root_dir) !== false) &&
if ($i == $parts_count) {
$label[] = $parts[($i - 1)];
} else {
- $label[] = Horde::link(Horde_Util::addParameter($url, 'dir', $dir), sprintf(_("Up to %s"), $dir)) . $parts[($i - 1)] . '</a>';
+ $label[] = Horde::link($url->add('dir', $dir), sprintf(_("Up to %s"), $dir)) . $parts[($i - 1)] . '</a>';
}
}
}
static public function getMenu()
{
$menu = new Horde_Menu();
- $menu->add(Horde_Util::addParameter(Horde::url('manager.php'), 'dir', Gollem::getHome()), _("_My Home"), 'folder_home.png');
+
+ $menu->add(Horde::url('manager.php')->add('dir', Gollem::getHome()), _("_My Home"), 'folder_home.png');
if (!empty($_SESSION['gollem'])) {
$backend_key = $_SESSION['gollem']['backend_key'];
if ($GLOBALS['registry']->isAdmin()) {
- $menu->add(Horde_Util::addParameter(Horde::url('permissions.php'), 'backend', $backend_key), _("_Permissions"), 'perms.png', Horde_Themes::img(null, 'horde'));
+ $menu->add(Horde::url('permissions.php')->add('backend', $backend_key), _("_Permissions"), 'perms.png');
}
if ($_SESSION['gollem']['backends'][$backend_key]['quota_val'] != -1) {
if ($GLOBALS['browser']->hasFeature('javascript')) {
$quota_url = 'javascript:' . Horde::popupJs(Horde::url('quota.php'), array('params' => array('backend' => $backend_key), 'height' => 300, 'width' => 300, 'urlencode' => true));
} else {
- $quota_url = Horde_Util::addParameter(Horde::url('quota.php'), 'backend', $backend_key);
+ $quota_url = Horde::url('quota.php')->add('backend', $backend_key);
}
- $menu->add($quota_url, _("Check Quota"), 'info_icon.png', Horde_Themes::img(null, 'horde'));
+ $menu->add($quota_url, _("Check Quota"), 'info_icon.png');
}
}
}
/**
- * Outputs Gollem's menu to the current output stream.
+ * Build Gollem's list of menu items.
*/
- static public function menu()
+ static public function prepareMenu()
{
+ if (isset(self::$_menu)) {
+ return;
+ }
+
$t = $GLOBALS['injector']->createInstance('Horde_Template');
$t->set('forminput', Horde_Util::formInput());
- $t->set('be_select', Gollem::backendSelect(), true);
+ $t->set('be_select', self::backendSelect(), true);
if ($t->get('be_select')) {
$t->set('accesskey', $GLOBALS['prefs']->getValue('widget_accesskey') ? Horde::getAccessKey(_("_Change Server")) : '');
$menu_view = $GLOBALS['prefs']->getValue('menu_view');
$link = Horde::link('#', _("Change Server"), '', '', 'serverSubmit(true);return false;');
$t->set('slink', sprintf('<ul><li>%s%s<br />%s</a></li></ul>', $link, ($menu_view != 'text') ? Horde::img('gollem.png') : '', ($menu_view != 'icon') ? Horde::highlightAccessKey(_("_Change Server"), $t->get('accesskey')) : ''));
}
- $t->set('menu_string', Gollem::getMenu()->render());
+ $t->set('menu_string', self::getMenu()->render());
+
+ self::$_menu = $t->fetch(GOLLEM_TEMPLATES . '/menu/menu.html');
- echo $t->fetch(GOLLEM_TEMPLATES . '/menu.html');
+ /* Need to buffer sidebar output here, because it may add things like
+ * cookies which need to be sent before output begins. */
+ Horde::startBuffer();
require HORDE_BASE . '/services/sidebar.php';
+ self::$_menu .= Horde::endBuffer();
+ }
+
+ /**
+ * Outputs Gollem's menu to the current output stream.
+ */
+ static public function menu()
+ {
+ self::prepareMenu();
+ echo self::$_menu;
}
/**
--- /dev/null
+<?php
+/**
+ * Login system task for automated upgrade tasks.
+ *
+ * Copyright 2010 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @author Michael Slusarz <slusarz@horde.org>
+ * @category Horde
+ * @license http://www.fsf.org/copyleft/gpl.html GPL
+ * @package Gollem
+ */
+class Gollem_LoginTasks_SystemTask_UpgradeFromGollem1 extends Horde_LoginTasks_SystemTask
+{
+ /**
+ * The interval at which to run the task.
+ *
+ * @var integer
+ */
+ public $interval = Horde_LoginTasks::ONCE;
+
+ /**
+ * Perform all functions for this task.
+ */
+ public function execute()
+ {
+ $this->_upgradePrefs();
+ }
+
+ /**
+ * Upgrade to the new preferences.
+ */
+ protected function _upgradePrefs()
+ {
+ global $prefs;
+
+ if (!$prefs->isDefault('columns')) {
+ $cols = $prefs->getValue('columns');
+ if (!is_array(json_decode($cols))) {
+ $prefs->setValue('columns', json_encode(explode("\t", $cols)));
+ }
+ }
+ }
+
+}
* See the enclosed file COPYING for license information (GPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
*
- * @author Mike Cochrane <mike@graftonhall.co.nz>
- * @package Horde_Mime
+ * @author Mike Cochrane <mike@graftonhall.co.nz>
+ * @category Horde
+ * @license http://www.fsf.org/copyleft/gpl.html GPL
+ * @package Gollem
*/
class Gollem_Mime_Viewer_Images extends Horde_Mime_Viewer_Images
{
* See the enclosed file COPYING for license information (GPL). If you
* did notcan receive this file, see http://www.fsf.org/copyleft/gpl.html.
*
- * @author Max Kalika <max@horde.org>
- * @author Chuck Hagenbuch <chuck@horde.org>
- * @author Michael Slusarz <slusarz@horde.org>
- * @package Gollem
+ * @author Max Kalika <max@horde.org>
+ * @author Chuck Hagenbuch <chuck@horde.org>
+ * @author Michael Slusarz <slusarz@horde.org>
+ * @category Horde
+ * @license http://www.fsf.org/copyleft/gpl.html GPL
+ * @package Gollem
*/
require_once dirname(__FILE__) . '/lib/Application.php';
Horde_Registry::appInit('gollem');
-$actionID = Horde_Util::getFormData('actionID');
$backkey = $_SESSION['gollem']['backend_key'];
$old_dir = Gollem::getDir();
+$vars = Horde_Variables::getDefaultVariables();
/* Get permissions. */
$delete_perms = Gollem::checkPermissions('backend', Horde_Perms::DELETE);
$read_perms = Gollem::checkPermissions('backend', Horde_Perms::READ);
/* Set directory. */
-if (is_a($result = Gollem::changeDir(), 'PEAR_Error')) {
- $notification->push($result);
+try {
+ Gollem::changeDir();
+} catch (VFS_Exception $e) {
+ $notification->push($e);
}
/* Run through the action handlers. */
-switch ($actionID) {
+switch ($vars->actionID) {
case 'create_folder':
- if ($edit_perms) {
- if ($new_folder = Horde_Util::getPost('new_folder')) {
- $result = Gollem::createFolder($old_dir, $new_folder);
- if (is_a($result, 'PEAR_Error')) {
- $notification->push($result->getMessage(), 'horde.error');
- } else {
- $notification->push(_("New folder created: ") . $new_folder, 'horde.success');
- }
+ if ($edit_perms &&
+ ($new_folder = Horde_Util::getPost('new_folder'))) {
+ try {
+ Gollem::createFolder($old_dir, $new_folder);
+ $notification->push(_("New folder created: ") . $new_folder, 'horde.success');
+ } catch (Gollem_Exception $e) {
+ $notification->push($e, 'horde.error');
}
}
break;
$old = explode('|', Horde_Util::getPost('old_names'));
if (!empty($new) && !empty($old) && (count($new) == count($old))) {
for ($i = 0, $iMax = count($new); $i < $iMax; ++$i) {
- $result = Gollem::renameItem($old_dir, $old[$i], $old_dir, $new[$i]);
- if (is_a($result, 'PEAR_Error')) {
- $notification->push($result->getMessage(), 'horde.error');
- } else {
+ try {
+ Gollem::renameItem($old_dir, $old[$i], $old_dir, $new[$i]);
$notification->push(sprintf(_("\"%s\" renamed to \"%s\""), $old[$i], $new[$i]), 'horde.success');
+ } catch (Gollem_Exception $e) {
+ $notification->push($e, 'horde.error');
}
}
Gollem::expireCache($old_dir);
if (is_array($items) && count($items)) {
$chmod = Horde_Util::getPost('chmod');
foreach ($items as $item) {
- if (($actionID == 'chmod_modify') && $chmod) {
- if (!is_a(Gollem::changePermissions(Gollem::getDir(), $item, $chmod), 'PEAR_Error')) {
+ if (($vars->actionID == 'chmod_modify') && $chmod) {
+ try {
+ Gollem::changePermissions(Gollem::getDir(), $item, $chmod);
Gollem::expireCache($old_dir);
$notification->push(_("Chmod done: ") . $item, 'horde.success');
- } else {
- $notification->push(sprintf(_("Cannot chmod %s: %s"), $item, $result->getMessage()), 'horde.error');
+ } catch (Gollem_Exception $e) {
+ $notification->push(sprintf(_("Cannot chmod %s: %s"), $item, $e->getMessage()), 'horde.error');
}
- } elseif ($actionID == 'delete_items') {
- if ($GLOBALS['gollem_vfs']->isFolder($old_dir, $item)) {
- $result = Gollem::deleteFolder($old_dir, $item);
- if (is_a($result, 'PEAR_Error')) {
- $notification->push(sprintf(_("Unable to delete folder %s: %s"), $item, $result->getMessage()), 'horde.error');
- } else {
+ } elseif ($vars->actionID == 'delete_items') {
+ if ($gollem_vfs->isFolder($old_dir, $item)) {
+ try {
+ Gollem::deleteFolder($old_dir, $item);
Gollem::expireCache($old_dir);
$notification->push(_("Folder removed: ") . $item, 'horde.success');
+ } catch (Gollem_Exception $e) {
+ $notification->push(sprintf(_("Unable to delete folder %s: %s"), $item, $e->getMessage()), 'horde.error');
}
} else {
- $result = Gollem::deleteFile($old_dir, $item);
- if (is_a($result, 'PEAR_Error')) {
- $notification->push(sprintf(_("Unable to delete file %s: %s"), $item, $result->getMessage()), 'horde.error');
- } else {
+ try {
+ Gollem::deleteFile($old_dir, $item);
Gollem::expireCache($old_dir);
$notification->push(_("File deleted: ") . $item, 'horde.success');
+ } catch (Gollem_Exception $e) {
+ $notification->push(sprintf(_("Unable to delete file %s: %s"), $item, $e->getMessage()), 'horde.error');
}
}
}
$val = 'file_upload_' . $i;
if (isset($_FILES[$val]) && ($_FILES[$val]['error'] != 4)) {
try {
- $GLOBALS['browser']->wasFileUploaded($val);
+ $browser->wasFileUploaded($val);
$filename = Horde_Util::dispelMagicQuotes($_FILES[$val]['name']);
- $res = Gollem::writeFile($old_dir, $filename, $_FILES[$val]['tmp_name']);
- if (is_a($res, 'PEAR_Error')) {
- $notification->push($res, 'horde.error');
- } else {
- Gollem::expireCache($old_dir);
- $notification->push(sprintf(_("File received: %s"), $filename), 'horde.success');
- }
+
+ Gollem::writeFile($old_dir, $filename, $_FILES[$val]['tmp_name']);
+ Gollem::expireCache($old_dir);
+ $notification->push(sprintf(_("File received: %s"), $filename), 'horde.success');
} catch (Horde_Browser_Exception $e) {
$notification->push($e, 'horde.error');
+ } catch (Gollem_Exception $e) {
+ $notification->push($e, 'horde.error');
}
}
}
case 'copy_items':
case 'cut_items':
- if ($edit_perms && !empty($GLOBALS['gollem_be']['clipboard'])) {
- $action = ($actionID == 'copy_items') ? 'copy' : 'cut';
+ if ($edit_perms && !empty($gollem_be['clipboard'])) {
+ $action = ($vars->actionID == 'copy_items') ? 'copy' : 'cut';
$items = Horde_Util::getPost('items');
if (is_array($items) && count($items)) {
case 'clear_items':
case 'paste_items':
- if ($edit_perms && !empty($GLOBALS['gollem_be']['clipboard'])) {
+ if ($edit_perms && !empty($gollem_be['clipboard'])) {
$items = Horde_Util::getPost('items');
if (is_array($items) && count($items)) {
foreach ($items as $val) {
if (isset($_SESSION['gollem']['clipboard'][$val])) {
$file = $_SESSION['gollem']['clipboard'][$val];
- if ($actionID == 'paste_items') {
- if ($file['action'] == 'cut') {
- $res = Gollem::moveFile($file['backend'], $file['path'], $file['name'], $backkey, $old_dir);
- } else {
- $res = Gollem::copyFile($file['backend'], $file['path'], $file['name'], $backkey, $old_dir);
- }
- if (is_a($res, 'PEAR_Error')) {
- $notification->push(sprintf(_("Cannot paste \"%s\" (file cleared from clipboard): %s"), $file['name'], $res->getMessage()), 'horde.error');
- } else {
+ if ($vars->actionID == 'paste_items') {
+ try {
+ if ($file['action'] == 'cut') {
+ Gollem::moveFile($file['backend'], $file['path'], $file['name'], $backkey, $old_dir);
+ } else {
+ Gollem::copyFile($file['backend'], $file['path'], $file['name'], $backkey, $old_dir);
+ }
+
Gollem::expireCache($old_dir);
if ($file['action'] == 'cut') {
Gollem::expireCache($file['path']);
}
$notification->push(sprintf(_("%s was successfully pasted."), $file['name'], $old_dir), 'horde.success');
+ } catch (VFS_Exception $e) {
+ $notification->push(sprintf(_("Cannot paste \"%s\" (file cleared from clipboard): %s"), $file['name'], $e->getMessage()), 'horde.error');
}
}
unset($_SESSION['gollem']['clipboard'][$val]);
break;
case 'change_sortby':
- if (($sortby = Horde_Util::getFormData('sortby')) !== null) {
- $prefs->setValue('sortby', $sortby);
+ if (isset($vars->sortby)) {
+ $prefs->setValue('sortby', $vars->sortby);
}
break;
case 'change_sortdir':
- if (($sortdir = Horde_Util::getFormData('sortdir')) !== null) {
- $prefs->setValue('sortdir', $sortdir);
+ if (isset($vars->sortdir)) {
+ $prefs->setValue('sortdir', $vars->sortdir);
}
break;
}
* etc., to make sure we can catch any errors. */
$currdir = Gollem::getDir();
-$list = Gollem::listFolder($currdir);
-if (is_a($list, 'PEAR_Error')) {
+try {
+ Gollem::listFolder($currdir);
+} catch (Gollem_Exception $e) {
/* If this is a user's home directory, try autocreating it. */
if ($currdir == Gollem::getHome()) {
- if (is_a($created = Gollem::createFolder('', $currdir), 'PEAR_Error')) {
+ try {
+ Gollem::createFolder('', $currdir);
+ try {
+ $list = Gollem::listFolder($currdir);
+ } catch (Gollem_Exception $e) {
+ /* If that didn't work, fall back to the parent or the home
+ * directory. */
+ $notification->push(sprintf(_("Permission denied to folder \"%s\": %s"), $currdir, $e->getMessage()), 'horde.error');
+
+ $loc = strrpos($currdir, '/');
+ Gollem::setDir(($loc !== false) ? substr($currdir, 0, $loc) : Gollem::getHome());
+ $currdir = Gollem::getDir();
+ $list = Gollem::listFolder($currdir);
+ }
+ } catch (Gollem_Exception $e) {
$notification->push(sprintf(_("Cannot create home directory: %s"), $created->getMessage()), 'horde.error');
- } else {
- $list = Gollem::listFolder($currdir);
}
}
-
- /* If that didn't work, fall back to the parent or the home directory. */
- if (is_a($list, 'PEAR_Error')) {
- $notification->push(sprintf(_("Permission denied to folder \"%s\": %s"), $currdir, $list->getMessage()), 'horde.error');
-
- $loc = strrpos($currdir, '/');
- Gollem::setDir(($loc !== false) ? substr($currdir, 0, $loc) : Gollem::getHome());
- $currdir = Gollem::getDir();
- $list = Gollem::listFolder($currdir);
- }
}
$numitem = count($list);
-$title = $GLOBALS['gollem_be']['label'];
+$title = $gollem_be['label'];
/* Image links. */
-$image_dir = Horde_Themes::img(null, 'horde');
-$edit_img = Horde::img('edit.png', _("Edit"), null, $image_dir);
-$download_img = Horde::img('download.png', _("Download"), null, $image_dir);
+$edit_img = Horde::img('edit.png', _("Edit"));
+$download_img = Horde::img('download.png', _("Download"));
$folder_img = Horde::img('folder.png', _("folder"));
$symlink_img = Horde::img('folder_symlink.png', _("symlink"));
/* Init some form vars. */
-$page = Horde_Util::getFormData('page', 0);
-$filter = Horde_Util::getFormData('filter', '');
+$page = isset($vars->page)
+ ? $vars->page
+ : 0;
if (isset($_SESSION['gollem']['filter']) &&
- $_SESSION['gollem']['filter'] != $filter) {
+ ($_SESSION['gollem']['filter'] != $vars->filter)) {
$page = 0;
}
-$_SESSION['gollem']['filter'] = $filter;
+$_SESSION['gollem']['filter'] = strval($vars->filter);
/* Commonly used URLs. */
$view_url = Horde::url('view.php');
$edit_url = Horde::url('edit.php');
$manager_url = Horde::url('manager.php');
-$refresh_params = array('page' => $page);
-if ($filter) {
- $refresh_params['filter'] = $filter;
+$refresh_url = $manager_url->copy()->add('page', $page);
+if ($vars->filter) {
+ $refresh_url->add('filter', $vars->filter);
}
-$refresh_url = Horde_Util::addParameter($manager_url, $refresh_params);
/* Get the list of copy/cut files in this directory. */
$clipboard_files = array();
-if (!empty($GLOBALS['gollem_be']['clipboard'])) {
+if (!empty($gollem_be['clipboard'])) {
foreach ($_SESSION['gollem']['clipboard'] as $val) {
if (($backkey == $val['backend']) && ($val['path'] == $currdir)) {
$clipboard_files[$val['name']] = 1;
}
/* Read the columns to display from the preferences. */
-$sources = Gollem::displayColumns();
-$columns = isset($sources[$backkey]) ? $sources[$backkey] : $GLOBALS['gollem_be']['attributes'];
+$sources = json_decode($prefs->getValue('columns'));
+$columns = isset($sources[$backkey])
+ ? $sources[$backkey]
+ : $gollem_be['attributes'];
/* Prepare the template. */
$template = $injector->createInstance('Horde_Template');
$template->setOption('gettext', true);
-$attrib = $GLOBALS['gollem_vfs']->getModifiablePermissions();
+$attrib = $gollem_vfs->getModifiablePermissions();
foreach (array('owner', 'group', 'all') as $val) {
foreach (array('read', 'write', 'execute') as $val2) {
$template->set($val . '_' . $val2, !$attrib[$val][$val2], true);
$template->set('forminput', Horde_Util::formInput());
$template->set('dir', $currdir);
$template->set('navlink', Gollem::directoryNavLink($currdir, $manager_url));
-$template->set('refresh', Horde::link($refresh_url, sprintf("%s %s", _("Refresh"), $GLOBALS['gollem_be']['label']), '', '', '', '', '', array('id' => 'refreshimg')) . Horde::img('reload.png', sprintf("%s %s", _("Refresh"), htmlspecialchars($GLOBALS['gollem_be']['label'])), null, $image_dir) . '</a>');
+$template->set('refresh', Horde::link($refresh_url, sprintf("%s %s", _("Refresh"), $gollem_be['label']), '', '', '', '', '', array('id' => 'refreshimg')) . Horde::img('reload.png', sprintf("%s %s", _("Refresh"), htmlspecialchars($gollem_be['label']))) . '</a>');
-$template->set('hasclipboard', !$edit_perms || !empty($GLOBALS['gollem_be']['clipboard']), true);
+$template->set('hasclipboard', !$edit_perms || !empty($gollem_be['clipboard']), true);
if (!$template->get('hasclipboard') ||
empty($_SESSION['gollem']['clipboard'])) {
$template->set('clipboard', null);
} else {
- $template->set('clipboard', Horde::link(Horde_Util::addParameter(Horde::url('clipboard.php'), 'dir', $currdir), _("View Clipboard")) . Horde::img('clipboard.png', _("View Clipboard")) . '</a>');
+ $template->set('clipboard', Horde::link(Horde::url('clipboard.php')->add('dir', $currdir), _("View Clipboard")) . Horde::img('clipboard.png', _("View Clipboard")) . '</a>');
}
if ($edit_perms) {
foreach ($list as $key => $val) {
/* Check if a filter is not empty and filter matches filename. */
- if (strlen($filter) &&
- !preg_match('/' . preg_quote($filter, '/') . '/', $val['name'])) {
+ if (strlen($vars->filter) &&
+ !preg_match('/' . preg_quote($vars->filter, '/') . '/', $val['name'])) {
continue;
}
$item = array(
'date' => htmlspecialchars(strftime($prefs->getValue('date_format'), $val['date'])),
- 'date_sort' => (int)$val['date'],
+ 'date_sort' => intval($val['date']),
'dl' => false,
'edit' => false,
'group' => empty($val['group']) ? '-' : htmlspecialchars($val['group']),
/* Create proper link. */
switch ($val['type']) {
case '**dir':
- $url = Horde_Util::addParameter($manager_url, array('dir' => Gollem::subdirectory($currdir, $val['name'])));
- $item['link'] = Horde::link($url) . '<strong>' . $name . '</strong></a>';
+ $url = $manager_url->copy()->add('dir', Gollem::subdirectory($currdir, $val['name']));
+ $item['link'] = $url->link() . '<strong>' . $name . '</strong></a>';
break;
case '**broken':
$dir = $currdir;
}
- $url = Horde_Util::addParameter($manager_url, array('dir' => Gollem::subdirectory($dir, $name)));
- $item['link'] = $item['name'] . ' -> <strong>' . Horde::link($url) . $val['link'] . '</a></strong>';
+ $url = $manager_url->copy()->add('dir', Gollem::subdirectory($dir, $name));
+ $item['link'] = $item['name'] . ' -> <strong>' . $url->link() . $val['link'] . '</a></strong>';
} else {
$item['link'] = $item['name'] . ' -> ' . $val['link'];
}
// Edit link if possible.
if (strpos($mime_type, 'text/') === 0) {
- $url = Horde_Util::addParameter($edit_url, array('actionID' => 'edit_file', 'type' => $val['type'], 'file' => $val['name'], 'dir' => $currdir, 'driver' => $GLOBALS['gollem_be']['driver']));
+ $url = $edit_url->copy()->add(array(
+ 'actionID' => 'edit_file',
+ 'type' => $val['type'],
+ 'file' => $val['name'],
+ 'dir' => $currdir,
+ 'driver' => $gollem_be['driver']
+ ));
$item['edit'] = Horde::link('#', '', '', '_blank', Horde::popupJs($url) . 'return false;') . $edit_img . '</a>';
}
// We can always download files.
- $item['dl'] = Horde::link(Horde::downloadUrl($val['name'], array('actionID' => 'download_file', 'dir' => $currdir, 'driver' => $GLOBALS['gollem_be']['driver'], 'file' => $val['name'])), sprintf(_("Download %s"), $val['name'])) . $download_img . '</a>';
+ $item['dl'] = Horde::link(Horde::downloadUrl($val['name'], array('actionID' => 'download_file', 'dir' => $currdir, 'driver' => $gollem_be['driver'], 'file' => $val['name'])), sprintf(_("Download %s"), $val['name'])) . $download_img . '</a>';
// Try a view link.
- $url = Horde_Util::addParameter($view_url, array('actionID' => 'view_file', 'type' => $val['type'], 'file' => $val['name'], 'dir' => $currdir, 'driver' => $GLOBALS['gollem_be']['driver']));
+ $url = $view_url->copy()->add(array(
+ 'actionID' => 'view_file',
+ 'type' => $val['type'],
+ 'file' => $val['name'],
+ 'dir' => $currdir,
+ 'driver' => $gollem_be['driver']
+ ));
$item['link'] = Horde::link('#', '', '', '_blank', Horde::popupJs($url) . 'return false;') . $name . '</a>';
break;
}
$start = ($page * $perpage) + 1;
$end = min($total, $start + $perpage - 1);
- $vars = Horde_Variables::getDefaultVariables();
$vars->set('page', $page);
- $pager = new Horde_Core_Ui_Pager('page', $vars, array('num' => $total, 'url' => $refresh_url, 'page_count' => 10, 'perpage' => $perpage));
+ $pager = new Horde_Core_Ui_Pager('page', $vars, array(
+ 'num' => $total,
+ 'url' => $refresh_url,
+ 'page_count' => 10,
+ 'perpage' => $perpage
+ ));
$page_caption = $pager->render();
}
if ($sortby == $sort) {
$hdr['class'] = ($sortdir ? 'sortup' : 'sortdown');
}
- $hdr['label'] = '<a href="' . Horde_Util::addParameter($refresh_url, array('actionID' => 'change_sortby', 'sortby' => $sort)) . '" class="sortlink">' . htmlspecialchars($hdr['label']) . '</a>';
+ $hdr['label'] = '<a href="' . $refresh_url->copy()->add(array('actionID' => 'change_sortby', 'sortby' => $sort)) . '" class="sortlink">' . htmlspecialchars($hdr['label']) . '</a>';
}
$headers[] = $hdr;
$template->set('headers', $headers, true);
$template->set('entry', $entry, true);
$template->set('page_caption', $page_caption);
- $template->set('filter_val', $filter);
+ $template->set('filter_val', $vars->filter);
$template->set('checkall', Horde::getAccessKeyAndTitle(_("Check _All/None")));
} else {
$template->set('empty_dir', true, true);
}
$template->set('itemcount', sprintf(ngettext(_("%d item"), _("%d items"), $total), $total));
-$js_code = array(
- 'var warn_recursive = ' . intval($GLOBALS['prefs']->getValue('recursive_deletes') == 'warn'),
-);
-
Horde::addScriptFile('manager.js', 'gollem');
Horde::addScriptFile('tables.js', 'horde');
+Horde::addInlineJsVars(array(
+ '-warn_recursive' => intval($prefs->getValue('recursive_deletes') == 'warn')
+));
+Gollem::prepareMenu();
require GOLLEM_TEMPLATES . '/common-header.inc';
-Horde::addInlineScript(implode(';', $js_code));
Gollem::menu();
Gollem::status();
echo $template->fetch(GOLLEM_TEMPLATES . '/manager/manager.html');
*
* See the enclosed file COPYING for license information (GPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @author Vijay Mahrra <vijay.mahrra@es.easynet.net>
+ * @category Horde
+ * @license http://www.fsf.org/copyleft/gpl.html GPL
+ * @package Gollem
*/
require_once dirname(__FILE__) . '/lib/Application.php';
Horde_Registry::appInit('gollem', array('admin' => true));
if (!Gollem::getBackends('all')) {
+ $notification->push(_("You need at least one backend defined to set permissions."), 'horde.error');
+
$title = _("Gollem Backend Permissions Administration");
+ Gollem::prepareMenu();
require GOLLEM_TEMPLATES . '/common-header.inc';
Gollem::menu();
Gollem::status();
- $notification->push(_("You need at least one backend defined to set permissions."), 'horde.error');
- $notification->notify();
require $registry->get('templates', 'horde') . '/common-footer.inc';
exit;
}
$perm_id = $perms->getPermissionId($permission);
} else {
$permission = $perms->newPermission($backendTag);
- $result = $perms->addPermission($permission, $app);
- if ($result instanceof PEAR_Error) {
- $notification->push(sprintf(_("Unable to create backend permission: %s"), $result->getMessage()), 'horde.error');
+ try {
+ $perms->addPermission($permission, $app);
+ } catch (Horde_Perms_Exception $e) {
+ $notification->push(sprintf(_("Unable to create backend permission: %s"), $e->getMessage()), 'horde.error');
Horde::url('redirect.php', true)->redirect();
}
+
$perm_id = $perms->getPermissionId($permission);
$notification->push(sprintf(_("Created empty permissions for \"%s\". You must explicitly grant access to this backend now."), $key), 'horde.warning');
}
* See the enclosed file COPYING for license information (GPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
*
- * @author Michael Slusarz <slusarz@horde.org>
+ * @author Michael Slusarz <slusarz@horde.org>
+ * @category Horde
+ * @license http://www.fsf.org/copyleft/gpl.html GPL
+ * @package Gollem
*/
require_once dirname(__FILE__) . '/lib/Application.php';
/* Is this a popup window? */
$isPopup = $browser->hasFeature('javascript');
-$title = _("Quota Display");
-require GOLLEM_TEMPLATES . '/common-header.inc';
-if (!$isPopup) {
- Gollem::menu();
- Gollem::status();
-}
-
/* Set up the template object. */
$template = $injector->createInstance('Horde_Template');
$template->setOption('gettext', true);
$template->set('quotaerror', false, true);
$template->set('quotadisplay', false, true);
$template->set('quotagraph', false, true);
-if ($GLOBALS['gollem_be']['quota_val'] > -1) {
+if ($gollem_be['quota_val'] > -1) {
$template->set('noquota', false, true);
- $quota_info = $GLOBALS['gollem_vfs']->getQuota();
- if (is_a($quota_info, 'PEAR_Error')) {
- $template->set('quotaerror', true, true);
- $template->set('quotaerrormsg', $quota_info->getMessage());
- } else {
+ try {
+ $quota_info = $gollem_vfs->getQuota();
$usage = $quota_info['usage'] / (1024 * 1024.0);
$limit = $quota_info['limit'] / (1024 * 1024.0);
$template->set('quotastyle', '<div>');
}
$template->set('quotadisplay', sprintf(_("%.2fMB / %.2fMB (%.2f%%)"), $usage, $limit, $percent), true);
+ } catch (VFS_Exception $e) {
+ $template->set('quotaerror', true, true);
+ $template->set('quotaerrormsg', $e->getMessage());
}
}
+$title = _("Quota Display");
+require GOLLEM_TEMPLATES . '/common-header.inc';
+if (!$isPopup) {
+ Gollem::menu();
+ Gollem::status();
+}
echo $template->fetch(GOLLEM_TEMPLATES . '/quota/quota.html');
require $registry->get('templates', 'horde') . '/common-footer.inc';
<?php
/**
+ * Selectlist handler.
+ *
* Copyright 2004-2010 The Horde Project (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (GPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
*
- * @author Michael Slusarz <slusarz@horde.org>
+ * @author Michael Slusarz <slusarz@horde.org>
+ * @category Horde
+ * @license http://www.fsf.org/copyleft/gpl.html GPL
+ * @package Gollem
*/
require_once dirname(__FILE__) . '/lib/Application.php';
-new IMP_Application(array('init' => array('authentication' => 'selectlist'));
+Horde_Registry::appInit('gollem', array(
+ 'authentication' => 'selectlist'
+));
/* Set directory. */
-if (is_a($result = Gollem::changeDir(), 'PEAR_Error')) {
- $notification->push($result);
+try {
+ Gollem::changeDir();
+} catch (Gollem_Exception $e) {
+ $notification->push($e);
}
$currdir = Gollem::getDir();
/* Create a new cache ID if one does not already exist. */
$cacheid = Horde_Util::getFormData('cacheid');
if (empty($cacheid)) {
- $cacheid = uniqid(mt_rand());
+ $cacheid = strval(new Horde_Support_Randomid());
$_SESSION['gollem']['selectlist'][$cacheid] = array();
}
$formid = Horde_Util::getFormData('formid');
/* Run through the action handlers. */
-$actionID = Horde_Util::getFormData('actionID');
-switch ($actionID) {
+switch (Horde_Util::getFormData('actionID')) {
case 'select':
$items = Horde_Util::getPost('items');
if (is_array($items) && count($items)) {
break;
}
-$info = array();
-$info['list'] = Gollem::listFolder($currdir);
-
-/* If that didn't work, fall back to the parent or the home directory. */
-if (is_a($info['list'], 'PEAR_Error')) {
- $notification->push(sprintf(_("Permission denied to %s: %s"), $currdir, $info['list']->getMessage()), 'horde.error');
+try {
+ $info = array(
+ 'list' => Gollem::listFolder($currdir)
+ );
+} catch (Gollem_Exception $e) {
+ /* If that didn't work, fall back to the parent or the home directory. */
+ $notification->push(sprintf(_("Permission denied to %s: %s"), $currdir, $e->getMessage()), 'horde.error');
$loc = strrpos($currdir, '/');
Gollem::setDir(($loc !== false) ? substr($currdir, 0, $loc) : Gollem::getHome());
$currdir = Gollem::getDir();
- $info['list'] = Gollem::listFolder($currdir);
+ $info = array(
+ 'list' => Gollem::listFolder($currdir)
+ );
}
$info['title'] = htmlspecialchars($GLOBALS['gollem_be']['label']);
/* Commonly used URLs. */
$self_url = Horde::url('selectlist.php');
-/* Now actually display everything, after we've notified the user of
- any errors. */
-$backkey = $_SESSION['gollem']['backend_key'];
-$list = $info['list'];
-$title = $info['title'];
-
-$js_code = array(
- 'var cacheid = \'' . $cacheid . '\'',
- 'var formid = \'' . $formid . '\'',
-);
-
-Horde::addScriptFile('selectlist.js', 'gollem');
-require GOLLEM_TEMPLATES . '/common-header.inc';
-Horde::addInlineScript(implode(';', $js_code));
-Gollem::status();
-
/* Set up the template object. */
$t = $injector->createInstance('Horde_Template');
$t->set('addbutton', _("Add"));
$t->set('cacheid', htmlspecialchars($cacheid));
$t->set('currdir', htmlspecialchars($currdir));
$t->set('formid', htmlspecialchars($formid));
-$t->set('navlink', Gollem::directoryNavLink($currdir, Horde_Util::addParameter($self_url, array('cacheid' => $cacheid, 'formid' => $formid))));
+$t->set('navlink', Gollem::directoryNavLink($currdir, $self_url->copy()->add(array('cacheid' => $cacheid, 'formid' => $formid))));
if ($GLOBALS['conf']['backend']['backend_list'] == 'shown') {
- $t->set('changeserver', Horde::link(htmlspecialchars(Horde_Auth::addLogoutParameters(Horde_Util::addParameter(Horde::url('login.php'), array('url' => Horde_Util::addParameter(Horde::url('selectlist.php'), array('formid' => $formid)))), Horde_Auth::REASON_LOGOUT)), _("Change Server")) . Horde::img('logout.png', _("Change Server")) . '</a>', true);
+ // TODO
+ //$t->set('changeserver', Horde::link(htmlspecialchars(Horde_Auth::addLogoutParameters(Horde_Util::addParameter(Horde::url('login.php'), array('url' => Horde_Util::addParameter(Horde::url('selectlist.php'), array('formid' => $formid)))), Horde_Auth::REASON_LOGOUT)), _("Change Server")) . Horde::img('logout.png', _("Change Server")) . '</a>', true);
} else {
$t->set('changeserver', '', true);
}
-if (is_array($list) &&
- count($list) &&
+if (is_array($info['list']) &&
+ count($info['list']) &&
Gollem::checkPermissions('backend', Horde_Perms::READ)) {
$entry = $icon_cache = array();
$rowct = 0;
- foreach ($list as $key => $val) {
+ foreach ($info['list'] as $key => $val) {
$item = array(
'dir' => false,
'name' => htmlspecialchars($val['name']),
$item['graphic'] = $folder_img;
} else {
if (empty($icon_cache[$val['type']])) {
- require_once 'Horde/MIME/Magic.php';
- require_once 'Horde/MIME/Viewer.php';
- if (is_callable(array('Horde', 'loadConfiguration'))) {
- $result = Horde::loadConfiguration('mime_drivers.php', array('mime_drivers', 'mime_drivers_map'), 'horde');
- extract($result);
- $result = Horde::loadConfiguration('mime_drivers.php', array('mime_drivers', 'mime_drivers_map'), 'gollem');
- $mime_drivers = array_merge_recursive($mime_drivers, $result['mime_drivers']);
- $mime_drivers_map = array_merge_recursive($mime_drivers_map, $result['mime_drivers_map']);
- } else {
- require HORDE_BASE . '/config/mime_drivers.php';
- require GOLLEM_BASE . '/config/mime_drivers.php';
- }
- $icon_cache[$val['type']] = Horde::img(MIME_Viewer::getIcon(MIME_Magic::extToMIME($val['type'])), '', '', '');
+ $icon_cache[$val['type']] = $injector->getInstance('Horde_Mime_Viewer')->getIcon($val['type']);
}
$item['graphic'] = $icon_cache[$val['type']];
}
/* Create proper link. */
switch ($val['type']) {
case '**dir':
- $url = Horde_Util::addParameter($self_url, array('dir' => Gollem::subdirectory($currdir, $val['name']), 'cacheid' => $cacheid, 'formid' => $formid));
- $item['link'] = Horde::link($url) . '<strong>' . $name . '</strong></a>';
+ $url = $self_url->copy()->add(array(
+ 'cacheid' => $cacheid,
+ 'dir' => Gollem::subdirectory($currdir, $val['name']),
+ 'formid' => $formid
+ ));
+ $item['link'] = $url->link() . '<strong>' . $name . '</strong></a>';
$item['dir'] = true;
break;
$dir = $currdir;
}
- $url = Horde_Util::addParameter($self_url, array('dir' => Gollem::subdirectory($currdir, $val['name']), 'cacheid' => $cacheid, 'formid' => $formid));
- $item['link'] = $item['name'] . ' -> <strong>' . Horde::link($url) . $val['link'] . '</a></strong>';
+ $url = $self_url->copy()->add(array(
+ 'cacheid' => $cacheid,
+ 'dir' => Gollem::subdirectory($currdir, $val['name']),
+ 'formid' => $formid
+ ));
+ $item['link'] = $item['name'] . ' -> <strong>' . $url->link() . $val['link'] . '</a></strong>';
} else {
$item['link'] = $item['name'] . ' -> ' . $val['link'];
}
$t->set('nofiles', _("There are no files in this folder."), true);
}
+$title = $info['title'];
+Horde::addScriptFile('selectlist.js', 'gollem');
+Horde::addInlineJsVars(array(
+ 'cacheid' => $cacheid,
+ 'formid' => $formid
+));
+require GOLLEM_TEMPLATES . '/common-header.inc';
+Gollem::status();
echo $t->fetch(GOLLEM_TEMPLATES . '/selectlist/selectlist.html');
require $registry->get('templates', 'horde') . '/common-footer.inc';
* See the enclosed file COPYING for license information (GPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
*
- * @author Max Kalika <max@horde.org>
- * @author Chuck Hagenbuch <chuck@horde.org>
+ * @author Max Kalika <max@horde.org>
+ * @author Chuck Hagenbuch <chuck@horde.org>
+ * @category Horde
+ * @license http://www.fsf.org/copyleft/gpl.html GPL
+ * @package Gollem
*/
require_once dirname(__FILE__) . '/lib/Application.php';
-new IMP_Application(array('init' => array('session_control' => 'readonly'));
+Horde_Registry::appInit('imp', array(
+ 'session_control' => 'readonly'
+));
-$actionID = Horde_Util::getFormData('actionID');
-$driver = Horde_Util::getFormData('driver');
-$filedir = Horde_Util::getFormData('dir');
-$filename = Horde_Util::getFormData('file');
-$type = Horde_Util::getFormData('type');
+$vars = Horde_Variables::getDefaultVariables();
-if ($driver != $GLOBALS['gollem_be']['driver']) {
- Horde::url('login.php')
- ->add(array('backend_key' => $driver,
- 'change_backend' => 1,
- 'url' => Horde::selfURL(true)))
- ->redirect();
+if ($vars->driver != $gollem_be['driver']) {
+ Horde::url('login.php')->add(array(
+ 'backend_key' => $vars->driver,
+ 'change_backend' => 1,
+ 'url' => Horde::selfURL(true)
+ ))->redirect();
}
$stream = null;
$data = '';
try {
if (is_callable(array($gollem_vfs, 'readStream'))) {
- $stream = $gollem_vfs->readStream($filedir, $filename);
+ $stream = $gollem_vfs->readStream($vars->dir, $vars->file);
} else {
- $data = $gollem_vfs->read($filedir, $filename);
+ $data = $gollem_vfs->read($vars->dir, $vars->file);
}
} catch (VFS_Exception $e) {
Horde::logMessage($e, 'NOTICE');
}
/* Run through action handlers. */
-switch ($actionID) {
+switch ($vars->actionID) {
case 'download_file':
- $browser->downloadHeaders($filename, null, false, $GLOBALS['gollem_vfs']->size($filedir, $filename));
+ $browser->downloadHeaders($vars->file, null, false, $gollem_vfs->size($vars->dir, $vars->file));
if (is_resource($stream)) {
while ($buffer = fread($stream, 8192)) {
echo $buffer;
// TODO
exit;
- Horde_Mime_Magic::extToMIME($type), $data);
- $mime->setName($filename);
+ $mime->setName($vars->name);
$contents = new MIME_Contents($mime);
$body = $contents->renderMIMEPart($mime);
$type = $contents->getMIMEViewerType($mime);