forked from extern/egroupware
#add sidebox menue to filemanager, with Links to Home and root.
#filemanager supports the configuration of a different startfolder (other than users home directory) #preferences for filemanager -define links to folders, that show in sidebox menu -specify the display characteristics in filelisting (default (all sorted), or forced folders first) #configuration options for filemanager -you may specify how many links to folders can be configured in filemanagers preferences YOU HAVE TO RUN Search and Register Hooks of all Applications, and you may have to login/logout.
This commit is contained in:
parent
e5f1bc9a24
commit
5f42817c56
158
filemanager/inc/class.filemanager_hooks.inc.php
Normal file
158
filemanager/inc/class.filemanager_hooks.inc.php
Normal file
@ -0,0 +1,158 @@
|
||||
<?php
|
||||
/**
|
||||
* eGroupWare - Hooks for admin, preferences and sidebox-menus
|
||||
*
|
||||
* @link http://www.egroupware.org
|
||||
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||
* @package filemanager
|
||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||
* @version $Id: class.filemanager_hooks.inc.php 25002 2008-03-03 12:16:11Z ralfbecker $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Class containing admin, preferences and sidebox-menus (used as hooks)
|
||||
*/
|
||||
class filemanager_hooks
|
||||
{
|
||||
static $appname = 'filemanager';
|
||||
static $foldercount = 1;
|
||||
static function sidebox_menu($args)
|
||||
{
|
||||
$location = is_array($args) ? $args['location'] : $args;
|
||||
$basepath = '/';
|
||||
$rootpath = '/home';
|
||||
$homepath = '/home/'.$GLOBALS['egw_info']['user']['account_lid'];
|
||||
//echo "<p>admin_prefs_sidebox_hooks::all_hooks(".print_r($args,True).") appname='$appname', location='$location'</p>\n";
|
||||
$config = config::read(self::$appname);
|
||||
if (!empty($config['max_folderlinks'])) self::$foldercount = (int)$config['max_folderlinks'];
|
||||
$file_prefs = &$GLOBALS['egw_info']['user']['preferences'][self::$appname];
|
||||
if ($location == 'sidebox_menu')
|
||||
{
|
||||
$title = $GLOBALS['egw_info']['apps'][self::$appname]['title'] . ' '. lang('Menu');
|
||||
$file = Array(
|
||||
'Home' => $GLOBALS['egw']->link('/index.php',array('menuaction'=>self::$appname.'.filemanager_ui.index','path'=>$homepath)),
|
||||
'Root' => $GLOBALS['egw']->link('/index.php',array('menuaction'=>self::$appname.'.filemanager_ui.index','path'=>$rootpath)),
|
||||
# not sure if we want to offer a link to the base directory for default, this way i do that as preference
|
||||
#'Base' => $GLOBALS['egw']->link('/index.php',array('menuaction'=>self::$appname.'.filemanager_ui.index','path'=>$basepath)),
|
||||
);
|
||||
if (!empty($file_prefs['showbase'])) $file['Base']= $GLOBALS['egw']->link('/index.php',array('menuaction'=>self::$appname.'.filemanager_ui.index','path'=>$basepath));
|
||||
if (!empty($file_prefs['startfolder'])) $file['Startfolder']= $GLOBALS['egw']->link('/index.php',array('menuaction'=>self::$appname.'.filemanager_ui.index','path'=>$file_prefs['startfolder']));
|
||||
for ($i=1; $i<=self::$foldercount;$i++) {
|
||||
if (!empty($file_prefs['folderlink'.$i])) {
|
||||
$foldername = array_pop(explode("/",$file_prefs['folderlink'.$i]));
|
||||
$file['Link '.$i.($foldername?": ($foldername)":'(Base)')]= $GLOBALS['egw']->link('/index.php',array(
|
||||
'menuaction'=>self::$appname.'.filemanager_ui.index',
|
||||
'path'=>$file_prefs['folderlink'.$i]));
|
||||
}
|
||||
}
|
||||
display_sidebox(self::$appname,$title,$file);
|
||||
}
|
||||
self::preferences(self::$appname);
|
||||
if ($GLOBALS['egw_info']['user']['apps']['admin']) self::admin(self::$appname);
|
||||
}
|
||||
|
||||
/**
|
||||
* Entries for filemanagers's admin menu
|
||||
*/
|
||||
static function admin($location = 'admin')
|
||||
{
|
||||
$file = Array(
|
||||
'Site Configuration' => $GLOBALS['egw']->link('/index.php','menuaction=admin.uiconfig.index&appname='.self::$appname),
|
||||
);
|
||||
if ($location == 'admin') {
|
||||
display_section(self::$appname,$file);
|
||||
} else {
|
||||
display_sidebox(self::$appname,lang('Admin'),$file);
|
||||
}
|
||||
}
|
||||
|
||||
static function preferences($location = 'preferences')
|
||||
{
|
||||
$file = array(
|
||||
'Preferences' => $GLOBALS['egw']->link('/index.php','menuaction=preferences.uisettings.index&appname='.self::$appname),
|
||||
);
|
||||
if ($location == 'preferences')
|
||||
{
|
||||
display_section(self::$appname,$file);
|
||||
} else {
|
||||
display_sidebox(self::$appname,lang('Preferences'),$file);
|
||||
}
|
||||
}
|
||||
|
||||
static function settings()
|
||||
{
|
||||
$config = config::read(self::$appname);
|
||||
if (!empty($config['max_folderlinks'])) self::$foldercount = (int)$config['max_folderlinks'];
|
||||
|
||||
$upload_boxes = array(
|
||||
'1' => '1',
|
||||
'5' => '5',
|
||||
'10' => '10',
|
||||
'20' => '20',
|
||||
'30' => '30'
|
||||
);
|
||||
$yes_no = array(
|
||||
'0' => 'No',
|
||||
'1' => 'Yes'
|
||||
);
|
||||
|
||||
$GLOBALS['settings'] = array(
|
||||
'showbase' => array(
|
||||
'type' => 'select',
|
||||
'name' => 'showbase',
|
||||
'values' => $yes_no,
|
||||
'label' => 'Show link to filemanagers basedirectory (/) in side box menu?',
|
||||
'help' => 'Default behavior is NO. The link will not be shown, but you are still able to navigate to this location,
|
||||
or configure this paricular location as startfolder or folderlink.',
|
||||
'xmlrpc' => True,
|
||||
'amin' => False
|
||||
),
|
||||
'alwayssortfolderstotop' => array(
|
||||
'type' => 'select',
|
||||
'name' => 'alwayssortfolderstotop',
|
||||
'values' => $yes_no,
|
||||
'label' => 'Sort folders always to the top?',
|
||||
'help' => 'Default behavior is NO. If you set this to YES, folders will always appear at the top of the list,
|
||||
no matter what you sort by. It will slow your mustang down as well.',
|
||||
'xmlrpc' => True,
|
||||
'amin' => False
|
||||
),
|
||||
'startfolder' => array(
|
||||
'type' => 'input',
|
||||
'name' => 'startfolder',
|
||||
'size' => 80,
|
||||
'default' => '',
|
||||
'label' => 'Enter the complete VFS path to specify your desired start folder.',
|
||||
'help' => 'If you leave this empty, the path does not exist or the user does not have permission to access the specified folder,
|
||||
the users startfolder will default to the users home folder.',
|
||||
'xmlrpc' => True,
|
||||
'amin' => False
|
||||
),
|
||||
# 'show_upload_boxes' => array(
|
||||
# 'type' => 'select',
|
||||
# 'label' => 'Default number of upload fields to show',
|
||||
# 'name' => 'show_upload_boxes',
|
||||
# 'values' => $upload_boxes,
|
||||
# 'help' => 'How many upload slots should be available for uploading files? (The boxes are displayed at the bottom of the file listing)',
|
||||
# 'xmlrpc' => True,
|
||||
# 'admin' => False
|
||||
# ),
|
||||
);
|
||||
for ($i=1;$i<=self::$foldercount;$i++) {
|
||||
$GLOBALS['settings']['folderlink'.$i] = array(
|
||||
'type' => 'input',
|
||||
'name' => 'folderlink'.$i,
|
||||
'size' => 80,
|
||||
'default' => '',
|
||||
'label' => 'Enter the complete VFS path to specify a fast access link to a folder ('.$i.').',
|
||||
'help' => 'If you leave this empty, the path does not exist or the user does not have permission to access the specified folder,
|
||||
the link will lead the user to the start folder or users home folder (if the startfolder is either not configured, or
|
||||
not available to the user).',
|
||||
'xmlrpc' => True,
|
||||
'amin' => False
|
||||
);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@ -61,6 +61,14 @@ class filemanager_ui
|
||||
{
|
||||
$content['nm']['path'] = $path;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!empty($GLOBALS['egw_info']['user']['preferences']['filemanager']['startfolder'])
|
||||
&& egw_vfs::is_dir($GLOBALS['egw_info']['user']['preferences']['filemanager']['startfolder']))
|
||||
{
|
||||
$content['nm']['path'] = $GLOBALS['egw_info']['user']['preferences']['filemanager']['startfolder'];
|
||||
}
|
||||
}
|
||||
if (isset($_GET['msg'])) $msg = $_GET['msg'];
|
||||
}
|
||||
// check if we have a failed upload AND upload_max_filesize >= post_max_size --> no $_POST array
|
||||
@ -369,7 +377,78 @@ class filemanager_ui
|
||||
{
|
||||
$namefilter = '/'.str_replace(array('\\?','\\*'),array('.{1}','.*'),preg_quote($query['search'])).'/i';
|
||||
}
|
||||
// if you want to have the folders on top, we must search for them first
|
||||
if ((int)$GLOBALS['egw_info']['user']['preferences']['filemanager']['alwayssortfolderstotop']==1) {
|
||||
$dirs = array();
|
||||
$files = array();
|
||||
foreach(egw_vfs::find($query['path'],array(
|
||||
'type'=>'d',
|
||||
'mindepth' => 1,
|
||||
'maxdepth' => $query['filter'] ? $query['filter'] : null,
|
||||
'order' => $query['order'], 'sort' => $query['sort'],
|
||||
'limit' => (int)$query['num_rows'].','.(int)$query['start'],
|
||||
'need_mime' => true,
|
||||
'name_preg' => $namefilter,
|
||||
),true) as $path => $row)
|
||||
{
|
||||
$row['icon'] = egw_vfs::mime_icon($row['mime']);
|
||||
$row['perms'] = egw_vfs::int2mode($row['mode']);
|
||||
// only show link if we have access to the file or dir
|
||||
if (egw_vfs::check_access($path,egw_vfs::READABLE)) $row['link'] = '/index.php?menuaction=filemanager.filemanager_ui.index&path='.$path;
|
||||
$row['user'] = $row['uid'] ? $GLOBALS['egw']->accounts->id2name($row['uid']) : 'root';
|
||||
$row['group'] = $row['gid'] ? $GLOBALS['egw']->accounts->id2name(-$row['gid']) : 'root';
|
||||
$row['hsize'] = egw_vfs::hsize($row['size']);
|
||||
|
||||
$dirs[] = $row;
|
||||
|
||||
$dir = dirname($path);
|
||||
if (!isset($dir_is_writable[$dir])) $dir_is_writable[$dir] = egw_vfs::is_writable($dir);
|
||||
if (!$dir_is_writable[$dir]) $readonlys["delete[$path]"] = true; // no rights to delete the file
|
||||
|
||||
}
|
||||
$numofdirs = egw_vfs::$find_total;
|
||||
$dirsretrieved = count($dirs);
|
||||
#echo "Dirs found:$numofdirs<br>"."Rows to query:".(int)$query['num_rows']." Start at:".(int)$query['start']."<br>";
|
||||
$filesdontshowjet = 0;
|
||||
if ($dirsretrieved >= (int)$query['num_rows']) {
|
||||
$filesdontshowjet =1;
|
||||
}
|
||||
// retrieve the files as well, since we need the total number of the search/listing
|
||||
$numofrows = (int)$query['num_rows'] - $dirsretrieved;
|
||||
$startatrow = 0;
|
||||
if ($filesdontshowjet == 0 && (int)$query['start'] > $numofdirs) $startatrow = (int)$query['start']-$numofdirs;
|
||||
#echo "Filessection:Dirs retrieved:$dirsretrieved<br>"."Rows to query:".$numofrows." Start at:".$startatrow."<br>";
|
||||
foreach(egw_vfs::find($query['path'],array(
|
||||
'type'=>'f',
|
||||
'mindepth' => 1,
|
||||
'maxdepth' => $query['filter'] ? $query['filter'] : null,
|
||||
'order' => $query['order'], 'sort' => $query['sort'],
|
||||
'limit' => $numofrows.','.$startatrow,
|
||||
'need_mime' => true,
|
||||
'name_preg' => $namefilter,
|
||||
),true) as $path => $row)
|
||||
{
|
||||
$row['icon'] = egw_vfs::mime_icon($row['mime']);
|
||||
$row['perms'] = egw_vfs::int2mode($row['mode']);
|
||||
// only show link if we have access to the file or dir
|
||||
if (egw_vfs::check_access($path,egw_vfs::READABLE)) $row['link'] = egw_vfs::download_url($path);
|
||||
$row['user'] = $row['uid'] ? $GLOBALS['egw']->accounts->id2name($row['uid']) : 'root';
|
||||
$row['group'] = $row['gid'] ? $GLOBALS['egw']->accounts->id2name(-$row['gid']) : 'root';
|
||||
$row['hsize'] = egw_vfs::hsize($row['size']);
|
||||
|
||||
if ($filesdontshowjet == 0) $files[] = $row;
|
||||
|
||||
$dir = dirname($path);
|
||||
if (!isset($dir_is_writable[$dir])) $dir_is_writable[$dir] = egw_vfs::is_writable($dir);
|
||||
if (!$dir_is_writable[$dir]) $readonlys["delete[$path]"] = true; // no rights to delete the file
|
||||
}
|
||||
$numoffiles = egw_vfs::$find_total;
|
||||
$rows = array_merge($dirs,$files);
|
||||
//_debug_array($readonlys);
|
||||
return egw_vfs::$find_total = $numofdirs + $numoffiles;
|
||||
} else {
|
||||
foreach(egw_vfs::find($query['path'],array(
|
||||
'type'=>'d',
|
||||
'mindepth' => 1,
|
||||
'maxdepth' => $query['filter'] ? $query['filter'] : null,
|
||||
'order' => $query['order'], 'sort' => $query['sort'],
|
||||
@ -397,7 +476,6 @@ class filemanager_ui
|
||||
$row['hsize'] = egw_vfs::hsize($row['size']);
|
||||
|
||||
//echo $path; _debug_array($row);
|
||||
|
||||
$rows[++$n] = $row;
|
||||
|
||||
$dir = dirname($path);
|
||||
@ -410,6 +488,7 @@ class filemanager_ui
|
||||
$readonlys["delete[$path]"] = true; // no rights to delete the file
|
||||
}
|
||||
}
|
||||
}
|
||||
//_debug_array($readonlys);
|
||||
return egw_vfs::$find_total;
|
||||
}
|
||||
|
@ -15,6 +15,11 @@ $setup_info['filemanager']['app_order'] = 6;
|
||||
$setup_info['filemanager']['enable'] = 1;
|
||||
|
||||
/* The hooks this app includes, needed for hooks registration */
|
||||
$setup_info['filemanager']['hooks']['preferences'] = 'filemanager_hooks::preferences';
|
||||
$setup_info['filemanager']['hooks']['settings'] = 'filemanager_hooks::settings';
|
||||
$setup_info['filemanager']['hooks']['sidebox_menu'] = 'filemanager_hooks::sidebox_menu';
|
||||
#$setup_info['filemanager']['hooks']['verify_settings'] = 'filemanager.filemanager_hooks.verify_settings';
|
||||
$setup_info['filemanager']['hooks']['admin'] = 'filemanager_hooks::admin';
|
||||
|
||||
|
||||
/* Dependencies for this app to work */
|
||||
|
33
filemanager/templates/default/config.tpl
Normal file
33
filemanager/templates/default/config.tpl
Normal file
@ -0,0 +1,33 @@
|
||||
<!-- BEGIN header -->
|
||||
<form method="POST" action="{action_url}">
|
||||
{hidden_vars}
|
||||
<table border="0" align="center">
|
||||
<tr class="th">
|
||||
<td colspan="2"><font color="{th_text}"> <b>{title}</b></font></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2"> <i><font color="red">{error}</i></font></td>
|
||||
</tr>
|
||||
<!-- END header -->
|
||||
<!-- BEGIN body -->
|
||||
<tr class="th">
|
||||
<td colspan="2"> <b>{lang_filemanager_configuration}</b></td>
|
||||
</tr>
|
||||
<tr class="row_on">
|
||||
<td> {lang_max_folderlinks}:</td>
|
||||
<td><input name="newsettings[max_folderlinks]" value="{value_max_folderlinks}" size="2"></td>
|
||||
</tr>
|
||||
<tr class="row_off">
|
||||
<td colspan="2"> {lang_allow_a_maximum_of_the_above_configured_folderlinks_to_be_configured_in_settings}</td>
|
||||
</tr>
|
||||
<!-- END body -->
|
||||
<!-- BEGIN footer -->
|
||||
<tr valign="bottom" style="height: 30px;">
|
||||
<td colspan="2" align="center">
|
||||
<input type="submit" name="submit" value="{lang_submit}">
|
||||
<input type="submit" name="cancel" value="{lang_cancel}">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<!-- END footer -->
|
Loading…
Reference in New Issue
Block a user