- new vfs-widget to encapsulate common vfs/file related stuff

+ path with clickable components
  + human readable size, mode, ...
  + mime icon with integrated thumbnail creation
- link widget uses now vfs-mime for it's icons
- thumbnail creation is now switched on with size 32px by default, it can
  be switched of by the admin or user, in doing so explicitly
- mime-icons are moved from filemanager to etemplate, as not everyone
  installs filemanager
- filemanager has now 3 display modi:
  + Current directory (with subdirs always on top)
  + Subdirs sorted in
  + Files from subdirs (shows recursive all files and you
    can click on the path components thanks to new vfs widget)
This commit is contained in:
Ralf Becker 2008-10-06 17:43:42 +00:00
parent d6693b27ab
commit 0218ffb751
45 changed files with 527 additions and 375 deletions

View File

@ -61,7 +61,7 @@ class historylog_widget
$status_widgets = is_array($value) && isset($value['status-widgets']) ? $value['status-widgets'] : null;
$id = is_array($value) ? $value['id'] : $value;
$historylog =& CreateObject('phpgwapi.historylog',$app);
$historylog =& new historylog($app);
if (!$id || method_exists($historylog,'search'))
{
$value = $id ? $historylog->search($id) : false;

View File

@ -284,7 +284,6 @@ class link_widget
for($row=$tpl->rows-1; list(,$link) = each($links); ++$row)
{
$value[$row] = $link;
$value[$row]['class'] = 'mimeIcon'; // limit height to 16px
$value[$row]['title'] = egw_link::title($link['app'],$link['id'],$link);
if (!is_array($link['id']))
{
@ -304,27 +303,11 @@ class link_widget
{
$value[$row]['title'] = preg_replace('/: ([^ ]+) /',': ',$value[$row]['title']); // remove mime-type, it's alread in the icon
}
// Get mimetype and thumbnail
$value[$row]['mime_icon'] = egw_vfs::mime_icon($link['type']);
$value[$row]['mime_title'] = lang('File').': '.lang($value[$row]['type']);
if($GLOBALS['egw_info']['user']['preferences']['common']['link_list_thumbnail'] && $GLOBALS['egw_info']['server']['link_list_thumbnail'] > 0)
{
list($image) = explode('/', $value[$row]['type']);
if($image == 'image')
{
$value[$row]['mime_icon'] = $GLOBALS['egw']->link('/etemplate/inc/thumbnail.inc.php',array(
'app' => $link['app2'],
'id' => $link['id2'],
'file' => $link['id'],
));
unset($value[$row]['class']); // use height of thumbnail
}
}
$value[$row]['icon'] = egw_link::vfs_path($link['app2'],$link['id2'],$link['id'],true);
}
else
{
$value[$row]['mime_icon'] = $value[$row]['app'].'/'.'navbar';
$value[$row]['mime_title'] = lang($value[$row]['app']);
$value[$row]['icon'] = 'egw/'.$value[$row]['app'];
$value[$row]['label'] = 'Unlink';
$value[$row]['help'] = lang('Remove this link (not the entry itself)');
}

View File

@ -0,0 +1,203 @@
<?php
/**
* eGroupWare eTemplate Extension - VFS Widgets
*
* @link http://www.egroupware.org
* @author Ralf Becker <RalfBecker@outdoor-training.de>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @copyright 2008 by RalfBecker@outdoor-training.de
* @package etemplate
* @subpackage extensions
* @version $Id$
*/
/**
* eTemplate extension to display stuff from the VFS system
*
* Contains the following widgets:
* - vfs aka File name+link: clickable filename, with evtl. clickable path-components
* - vfs-size aka File size: human readable filesize, eg. 1.4k
* - vfs-mode aka File mode: posix mode as string eg. drwxr-x---
* - vfs-mime aka File icon: mime type icon or thumbnail (if configured AND enabled in the user-prefs)
* - vfs-uid aka File owner: Owner of file, or 'root' if none
* - vfs-gid aka File group: Group of file, or 'root' if none
*
* All widgets accept as value a full path.
* vfs-mime and vfs itself also allow an array with values like stat (incl. 'path'!) as value.
* vfs-mime also allows just the mime type as value.
* All other widgets allow additionally the nummeric value from the stat call (to not call it again).
*/
class vfs_widget
{
/**
* exported methods of this class
*
* @var array
*/
var $public_functions = array(
'pre_process' => True,
);
/**
* availible extensions and there names for the editor
*
* @var array
*/
var $human_name = array(
'vfs' => 'File name+link', // clickable filename, with evtl. clickable path-components
'vfs-size' => 'File size', // human readable filesize
'vfs-mode' => 'File mode', // posix mode as string eg. drwxr-x---
'vfs-mime' => 'File icon', // mime type icon or thumbnail
'vfs-uid' => 'File owner', // Owner of file, or 'root' if none
'vfs-gid' => 'File group', // Group of file, or 'root' if none
);
/**
* pre-processing of the extension
*
* This function is called before the extension gets rendered
*
* @param string $form_name form-name of the control
* @param mixed &$value value / existing content, can be modified
* @param array &$cell array with the widget, can be modified for ui-independent widgets
* @param array &$readonlys names of widgets as key, to be made readonly
* @param mixed &$extension_data data the extension can store persisten between pre- and post-process
* @param object &$tmpl reference to the template we belong too
* @return boolean true if extra label is allowed, false otherwise
*/
function pre_process($form_name,&$value,&$cell,&$readonlys,&$extension_data,&$tmpl)
{
$type = $cell['type'];
$readonly = $cell['readonly'] || $readonlys;
// check if we have a path and not the raw value, in that case we have to do a stat first
if (in_array($type,array('vfs-size','vfs-mode','vfs-uid','vfs-gid')) && !is_numeric($value))
{
if (!$value || !($stat = egw_vfs::stat($value)))
{
if ($value) $value = lang("File '%1' not found!",$value);
$cell = etemplate::empty_cell();
return true; // allow extra value;
}
}
$cell['type'] = 'label';
switch($type)
{
case 'vfs-size': // option: add size in bytes in brackets
$value = egw_vfs::hsize($size = is_numeric($value) ? $value : $stat['size']);
if ($cell['size']) $value .= ' ('.$size.')';
$cell['type'] = 'label';
break;
case 'vfs-mode':
$value = egw_vfs::int2mode(is_numeric($value) ? $value : $stat['mode']);
list($span,$class) = explode(',',$cell['span'],2);
$class .= ($class ? ' ' : '') . 'vfsMode';
$cell['span'] = $span.','.$class;
break;
case 'vfs-uid':
case 'vfs-gid':
$uid = !is_numeric($value) ? $stat[$type=='vfs-uid'?'uid':'gid'] : $value;
$value = !$uid ? 'root' : $GLOBALS['egw']->accounts->id2name($type=='vfs-uid'?$uid:-$uid); // our internal gid's are negative!
break;
case 'vfs':
if (is_array($value))
{
$name = $value['name'];
$path = substr($value['path'],0,-strlen($name)-1);
$mime = $value['mime'];
}
else
{
$name = $value;
$path = '';
$mime = egw_vfs::mime_content_type($value);
$value = array();
}
if (($cell_name = $cell['name']) == '$row')
{
$cell_name = array_pop($arr=explode('][',substr($form_name,0,-1)));
}
$cell['name'] = '';
$cell['type'] = 'hbox';
$cell['size'] = '0,,0,0';
foreach($comps=explode('/',$name) as $n => $component)
{
if ($n)
{
$sep = soetemplate::empty_cell('label','',array('label' => '/'));
soetemplate::add_child($cell,$sep);
unset($sep);
}
$value['c'.$n] = $component;
$path .= '/'.$component;
if (egw_vfs::check_access($path,egw_vfs::READABLE)) // show link only if we have access to the file or dir
{
if ($n < count($comps)-1 || $mime == egw_vfs::DIR_MIME_TYPE)
{
$value['l'.$n] = '/index.php?menuaction=filemanager.filemanager_ui.index&path='.$path;
$target = '';
}
else
{
$value['l'.$n] = egw_vfs::download_url($path);
$target = ',,,_blank';
}
}
$comp = etemplate::empty_cell('label',$cell_name.'[c'.$n.']',array('size' => ',@'.$cell_name.'[l'.$n.']'.$target));
etemplate::add_child($cell,$comp);
unset($comp);
}
break;
case 'vfs-mime':
if (!is_array($value))
{
if ($value[0] == '/' || count(explode('/',$value)) != 2)
{
$mime = egw_vfs::mime_content_type($path=$value);
}
else
{
$mime = $value;
}
}
else
{
$path = $value['path'];
$mime = $value['mime'];
}
//error_log(__METHOD__."() type=vfs-mime: value=".array2string($value).": mime=$mime, path=$path");
$cell['type'] = 'image';
$cell['label'] = $mime;
list($mime_main,$mime_sub) = explode('/',$mime);
if ($mime_main == 'egw')
{
$value = $mime_sub.'/navbar'; // egw-applications for link-widget
$cell['label'] = lang($mime_sub);
list($span,$class) = explode(',',$cell['span'],2);
$class .= ($class ? ' ' : '') . 'vfsMimeIcon';
$cell['span'] = $span.','.$class;
}
elseif($path && $mime_main == 'image' && (string)$GLOBALS['egw_info']['server']['link_list_thumbnail'] != '0' &&
(string)$GLOBALS['egw_info']['user']['preferences']['common']['link_list_thumbnail'] != '0' &&
// check the size of the image, as too big images get no icon, but a PHP Fatal error: Allowed memory size exhausted
(!is_array($value) && ($stat = egw_vfs::stat($path)) ? $stat['size'] : $value['size']) < 600000)
{
$value = $GLOBALS['egw']->link('/etemplate/thumbnail.php',array('path' => $path));
}
else
{
$value = egw_vfs::mime_icon($mime);
}
break;
default:
$value = 'Not yet implemented';
}
return true;
}
}

View File

@ -1,170 +0,0 @@
<?php
/**
* eGroupWare - eTemplates
*
* @link http://www.egroupware.org
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @author Nathan Gray
* @package etemplate
* @version $Id$
*/
if (!preg_match('/^[a-z0-9_-]+$/i',$_GET['app'])) die('Stop'); // just to prevent someone doing nasty things
$GLOBALS['egw_info']['flags'] = array(
'currentapp' => $_GET['app'],
'noheader' => true,
'nonavbar' => true
);
include ('../../header.inc.php');
$g_srcfile = egw_link::vfs_path($_GET['app'],$_GET['id'],$_GET['file']);
$g_dstfile = $GLOBALS['egw_info']['server']['temp_dir'] . '/egw-thumbs/'.$_GET['app'].'/'.$_GET['id'].'/'.$_GET['file'];
// Check for existing thumbnail
if(file_exists($g_dstfile) && filemtime($g_dstfile) >= filemtime($g_srcfile)) {
header('Content-Type: image/png');
readfile($g_dstfile);
return;
}
$thumbnail = get_thumbnail($file, true);
if($thumbnail) {
header('Content-Type: image/png');
imagepng( $thumbnail );
imagedestroy($thumbnail);
}
/**
* Private function to get a thumbnail image for a linked image file.
*
* This function creates a thumbnail of the given image, if possible, and stores it in $GLOBALS['egw_info']['server']['temp_dir'].
* Returns the image, or false if the file could not be thumbnailed. Thumbnails are PNGs.
*
* @param array $file VFS File array to thumbnail
* @return image or false
*
* @author Nathan Gray
*/
function get_thumbnail($file, $return_data = true)
{
global $g_srcfile,$g_dstfile;
$max_width = $max_height = $GLOBALS['egw_info']['server']['link_list_thumbnail'];
if($max_width == 0) {
// thumbnailing disabled
return false;
} elseif( !gdVersion() ) {
// GD disabled or not installed
return false;
}
// Quality
$g_imgcomp=55;
$dst_dir = dirname($g_dstfile);
// files dont exist, if you have no access permission
if((file_exists($dst_dir) || mkdir($dst_dir, 0700, true)) && file_exists($g_srcfile)) {
$g_is=getimagesize($g_srcfile);
if($g_is[0] < $max_width && $g_is[1] < $max_height) {
$g_iw = $g_is[0];
$g_ih = $g_is[1];
} elseif(($g_is[0]-$max_width)>=($g_is[1]-$max_height)) {
$g_iw=$max_width;
$g_ih=($max_width/$g_is[0])*$g_is[1];
} else {
$g_ih=$max_height;
$g_iw=($g_ih/$g_is[1])*$g_is[0];
}
// Get mime type
list($type, $image_type) = explode('/',egw_vfs::mime_content_type($g_srcfile));
if($type != 'image') {
return false;
}
switch ($image_type) {
case 'png':
$img_src = imagecreatefrompng($g_srcfile);
break;
case 'jpg':
case 'jpeg':
$img_src = imagecreatefromjpeg($g_srcfile);
break;
case 'gif':
$img_src = imagecreatefromgif($g_srcfile);
break;
case 'bmp':
$img_src = imagecreatefromwbmp($g_srcfile);
break;
default:
return false;
}
if(!($gdVersion = gdVersion())) {
return false;
} elseif ($gdVersion >= 2) {
$img_dst=imagecreatetruecolor($g_iw,$g_ih);
imageSaveAlpha($img_dst, true);
$trans_color = imagecolorallocatealpha($img_dst, 0, 0, 0, 127);
imagefill($img_dst, 0, 0, $trans_color);
} else {
$img_dst = imagecreate($g_iw, $g_ih);
}
imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $g_iw, $g_ih, $g_is[0], $g_is[1]);
imagepng($img_dst, $g_dstfile);
return $return_data ? $img_dst : $g_dstfile;
} else {
return false;
}
}
/**
* Get which version of GD is installed, if any.
*
* Returns the version (1 or 2) of the GD extension.
* Off the php manual page, thanks Hagan Fox
*/
function gdVersion($user_ver = 0)
{
if (! extension_loaded('gd')) { return; }
static $gd_ver = 0;
// Just accept the specified setting if it's 1.
if ($user_ver == 1) { $gd_ver = 1; return 1; }
// Use the static variable if function was called previously.
if ($user_ver !=2 && $gd_ver > 0 ) { return $gd_ver; }
// Use the gd_info() function if possible.
if (function_exists('gd_info')) {
$ver_info = gd_info();
preg_match('/\d/', $ver_info['GD Version'], $match);
$gd_ver = $match[0];
return $match[0];
}
// If phpinfo() is disabled use a specified / fail-safe choice...
if (preg_match('/phpinfo/', ini_get('disable_functions'))) {
if ($user_ver == 2) {
$gd_ver = 2;
return 2;
} else {
$gd_ver = 1;
return 1;
}
}
// ...otherwise use phpinfo().
ob_start();
phpinfo(8);
$info = ob_get_contents();
ob_end_clean();
$info = stristr($info, 'gd version');
preg_match('/\d/', $info, $match);
$gd_ver = $match[0];
return $match[0];
}

View File

@ -2,7 +2,7 @@
/**
* eGroupWare - eTemplates for Application etemplate
* http://www.egroupware.org
* generated by soetemplate::dump4setup() 2008-10-04 10:27
* generated by soetemplate::dump4setup() 2008-10-06 19:41
*
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package etemplate
@ -195,9 +195,9 @@ $templ_data[] = array('name' => 'etemplate.link_widget.list','template' => '','l
$templ_data[] = array('name' => 'etemplate.link_widget.list','template' => '','lang' => '','group' => '0','version' => '1.5.001','data' => 'a:1:{i:0;a:5:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:2:{s:1:"D";s:10:",!@primary";s:2:"c1";s:3:"nmr";}i:1;a:4:{s:1:"A";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:2:{s:4:"type";s:4:"html";s:4:"name";s:17:"${row}[mime_icon]";}i:2;a:2:{s:4:"name";s:11:"${row}[app]";s:4:"type";s:5:"label";}}s:1:"B";a:4:{s:4:"size";s:6:"2,,0,0";s:4:"type";s:4:"hbox";i:1;a:5:{s:7:"no_lang";s:1:"1";s:4:"size";s:1:"2";s:4:"type";s:3:"box";i:1;a:2:{s:4:"type";s:4:"html";s:4:"name";s:17:"${row}[thumbnail]";}i:2;a:5:{s:7:"no_lang";s:1:"1";s:4:"name";s:13:"${row}[title]";s:4:"size";s:34:",@${row}[view],,,$row_cont[target]";s:4:"type";s:5:"label";s:4:"help";s:41:"view this linked entry in its application";}}i:2;a:4:{s:7:"no_lang";s:1:"1";s:4:"name";s:14:"${row}[remark]";s:4:"type";s:5:"label";s:4:"span";s:15:",note_following";}}s:1:"C";a:5:{s:5:"label";s:6:"Unlink";s:4:"name";s:26:"unlink[$row_cont[link_id]]";s:4:"type";s:6:"button";s:4:"size";s:10:"delete.png";s:4:"help";s:39:"Remove this link (not the entry itself)";}s:1:"D";a:4:{s:4:"name";s:7:"primary";s:4:"size";s:18:"$row_cont[link_id]";s:4:"type";s:5:"radio";s:4:"help";s:45:"Select a primary contact, to show in the list";}}}s:4:"cols";i:4;s:4:"rows";i:1;s:4:"size";s:12:",,,whiteback";}}','size' => ',,,whiteback','style' => '.whiteback { background: white; }
.note_following { font-style: italic; padding-left: 5px; }','modified' => '1192470162',);
$templ_data[] = array('name' => 'etemplate.link_widget.list','template' => '','lang' => '','group' => '0','version' => '1.5.002','data' => 'a:1:{i:0;a:5:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:4:{s:2:"c1";s:3:"nmr";s:1:"E";s:10:",!@primary";s:1:"A";s:25:"20,@link_list_format=text";s:1:"B";s:24:",@link_list_format=icons";}i:1;a:5:{s:1:"A";a:4:{s:4:"type";s:5:"image";s:4:"name";s:17:"${row}[mime_icon]";s:4:"span";s:17:",$row_cont[class]";s:5:"label";s:21:"$row_cont[mime_title]";}s:1:"B";a:2:{s:4:"name";s:11:"${row}[app]";s:4:"type";s:5:"label";}s:1:"C";a:4:{s:4:"size";s:6:"2,,0,0";s:4:"type";s:4:"hbox";i:1;a:5:{s:7:"no_lang";s:1:"1";s:4:"size";s:1:"2";s:4:"type";s:3:"box";i:1;a:2:{s:4:"type";s:4:"html";s:4:"name";s:17:"${row}[thumbnail]";}i:2;a:5:{s:7:"no_lang";s:1:"1";s:4:"name";s:13:"${row}[title]";s:4:"size";s:34:",@${row}[view],,,$row_cont[target]";s:4:"type";s:5:"label";s:4:"help";s:41:"view this linked entry in its application";}}i:2;a:4:{s:7:"no_lang";s:1:"1";s:4:"name";s:14:"${row}[remark]";s:4:"type";s:5:"label";s:4:"span";s:15:",note_following";}}s:1:"D";a:5:{s:5:"label";s:6:"Unlink";s:4:"name";s:26:"unlink[$row_cont[link_id]]";s:4:"type";s:6:"button";s:4:"size";s:10:"delete.png";s:4:"help";s:39:"Remove this link (not the entry itself)";}s:1:"E";a:4:{s:4:"name";s:7:"primary";s:4:"size";s:18:"$row_cont[link_id]";s:4:"type";s:5:"radio";s:4:"help";s:45:"Select a primary contact, to show in the list";}}}s:4:"cols";i:5;s:4:"rows";i:1;s:4:"size";s:12:",,,whiteback";}}','size' => ',,,whiteback','style' => '.whiteback { background: white; }
$templ_data[] = array('name' => 'etemplate.link_widget.list','template' => '','lang' => '','group' => '0','version' => '1.5.002','data' => 'a:1:{i:0;a:5:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:4:{s:2:"c1";s:3:"row";s:1:"A";s:25:"20,@link_list_format=text";s:1:"B";s:24:",@link_list_format=icons";s:1:"E";s:10:",!@primary";}i:1;a:5:{s:1:"A";a:2:{s:4:"type";s:8:"vfs-mime";s:4:"name";s:12:"${row}[icon]";}s:1:"B";a:2:{s:4:"name";s:11:"${row}[app]";s:4:"type";s:5:"label";}s:1:"C";a:4:{s:4:"size";s:6:"2,,0,0";s:4:"type";s:4:"hbox";i:1;a:5:{s:7:"no_lang";s:1:"1";s:4:"name";s:13:"${row}[title]";s:4:"size";s:34:",@${row}[view],,,$row_cont[target]";s:4:"type";s:5:"label";s:4:"help";s:41:"view this linked entry in its application";}i:2;a:4:{s:7:"no_lang";s:1:"1";s:4:"name";s:14:"${row}[remark]";s:4:"type";s:5:"label";s:4:"span";s:15:",note_following";}}s:1:"D";a:5:{s:5:"label";s:6:"Unlink";s:4:"name";s:26:"unlink[$row_cont[link_id]]";s:4:"type";s:6:"button";s:4:"size";s:10:"delete.png";s:4:"help";s:39:"Remove this link (not the entry itself)";}s:1:"E";a:4:{s:4:"name";s:7:"primary";s:4:"size";s:18:"$row_cont[link_id]";s:4:"type";s:5:"radio";s:4:"help";s:45:"Select a primary contact, to show in the list";}}}s:4:"cols";i:5;s:4:"rows";i:1;s:4:"size";s:12:",,,whiteback";}}','size' => ',,,whiteback','style' => '.whiteback { background: white; }
.note_following { font-style: italic; padding-left: 5px; }
.mimeIcon img { height: 16px; }','modified' => '1192470162',);
','modified' => '1192470162',);
$templ_data[] = array('name' => 'etemplate.link_widget.search','template' => '','lang' => '','group' => '0','version' => '1.0.0.001','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:4:{i:0;a:5:{s:2:"c1";s:6:"row_on";s:2:"c3";s:7:"row_off";s:2:"h3";s:10:",@no_files";s:2:"c2";s:6:"row_on";s:2:"h2";s:6:",!@msg";}i:1;a:3:{s:1:"A";a:5:{s:4:"type";s:6:"select";s:5:"label";s:6:"Search";s:7:"no_lang";s:1:"1";s:4:"name";s:3:"app";s:4:"help";s:26:"Select an App to search in";}s:1:"B";a:4:{s:4:"type";s:4:"text";s:4:"size";s:2:"25";s:4:"name";s:5:"query";s:4:"help";s:22:"Enter a search pattern";}s:1:"C";a:4:{s:4:"type";s:6:"button";s:5:"label";s:6:"Search";s:4:"name";s:6:"search";s:4:"help";s:30:"Click here to start the search";}}i:2;a:3:{s:1:"A";a:4:{s:4:"type";s:5:"label";s:4:"span";s:13:"all,redItalic";s:4:"name";s:3:"msg";s:5:"align";s:6:"center";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}}i:3;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:11:"attach file";}s:1:"B";a:3:{s:4:"type";s:4:"file";s:4:"name";s:4:"file";s:4:"help";s:69:"Enter filename to upload and attach, use [Browse...] to search for it";}s:1:"C";a:4:{s:4:"type";s:6:"button";s:5:"label";s:6:"Upload";s:4:"name";s:6:"upload";s:4:"help";s:29:"Click here to upload the file";}}}s:4:"rows";i:3;s:4:"cols";i:3;}}','size' => '','style' => '.error_msg { font-style: italic; color: red; }','modified' => '1113223869',);

View File

@ -111,3 +111,10 @@
.nm_num_rows select {
width: 40px;
}
.vfsMode {
font-family: monospace; font-weight: bold;
}
.vfsMimeIcon img {
height: 16px;
}

View File

Before

Width:  |  Height:  |  Size: 139 B

After

Width:  |  Height:  |  Size: 139 B

View File

Before

Width:  |  Height:  |  Size: 140 B

After

Width:  |  Height:  |  Size: 140 B

View File

Before

Width:  |  Height:  |  Size: 230 B

After

Width:  |  Height:  |  Size: 230 B

View File

Before

Width:  |  Height:  |  Size: 750 B

After

Width:  |  Height:  |  Size: 750 B

View File

Before

Width:  |  Height:  |  Size: 909 B

After

Width:  |  Height:  |  Size: 909 B

View File

Before

Width:  |  Height:  |  Size: 121 B

After

Width:  |  Height:  |  Size: 121 B

View File

Before

Width:  |  Height:  |  Size: 695 B

After

Width:  |  Height:  |  Size: 695 B

View File

Before

Width:  |  Height:  |  Size: 760 B

After

Width:  |  Height:  |  Size: 760 B

View File

Before

Width:  |  Height:  |  Size: 119 B

After

Width:  |  Height:  |  Size: 119 B

View File

Before

Width:  |  Height:  |  Size: 119 B

After

Width:  |  Height:  |  Size: 119 B

View File

Before

Width:  |  Height:  |  Size: 119 B

After

Width:  |  Height:  |  Size: 119 B

View File

Before

Width:  |  Height:  |  Size: 805 B

After

Width:  |  Height:  |  Size: 805 B

View File

Before

Width:  |  Height:  |  Size: 847 B

After

Width:  |  Height:  |  Size: 847 B

View File

Before

Width:  |  Height:  |  Size: 750 B

After

Width:  |  Height:  |  Size: 750 B

View File

Before

Width:  |  Height:  |  Size: 544 B

After

Width:  |  Height:  |  Size: 544 B

View File

Before

Width:  |  Height:  |  Size: 363 B

After

Width:  |  Height:  |  Size: 363 B

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

193
etemplate/thumbnail.php Normal file
View File

@ -0,0 +1,193 @@
<?php
/**
* eGroupWare - eTemplates
*
* @link http://www.egroupware.org
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @author Nathan Gray
* @package etemplate
* @version $Id$
*/
if (isset($_GET['app']))
{
$app = $_GET['app'];
}
elseif(isset($_GET['path']))
{
list(,$apps,$app) = explode('/',$_GET['path']);
if ($apps !== 'apps') $app = 'filemanager';
}
if (!preg_match('/^[a-z0-9_-]+$/i',$app)) die('Stop'); // just to prevent someone doing nasty things
$GLOBALS['egw_info']['flags'] = array(
'currentapp' => $app,
'noheader' => true,
'nonavbar' => true
);
include ('../header.inc.php');
// strip slashes from _GET parameters, if someone still has magic_quotes_gpc on
if (get_magic_quotes_gpc() && $_GET)
{
$_GET = etemplate::array_stripslashes($_GET);
}
if (isset($_GET['path']))
{
$g_srcfile = egw_vfs::PREFIX.$_GET['path'];
}
else
{
$g_srcfile = egw_link::vfs_path($_GET['app'],$_GET['id'],$_GET['file']);
}
$g_dstfile = $GLOBALS['egw_info']['server']['temp_dir'] . '/egw-thumbs'.parse_url($g_srcfile,PHP_URL_PATH);
// Check for existing thumbnail
if(file_exists($g_dstfile) && filemtime($g_dstfile) >= filemtime($g_srcfile)) {
header('Content-Type: image/png');
readfile($g_dstfile);
return;
}
$thumbnail = get_thumbnail($file, true);
if($thumbnail) {
header('Content-Type: image/png');
imagepng( $thumbnail );
imagedestroy($thumbnail);
}
/**
* Private function to get a thumbnail image for a linked image file.
*
* This function creates a thumbnail of the given image, if possible, and stores it in $GLOBALS['egw_info']['server']['temp_dir'].
* Returns the image, or false if the file could not be thumbnailed. Thumbnails are PNGs.
*
* @param array $file VFS File array to thumbnail
* @return image or false
*
* @author Nathan Gray
*/
function get_thumbnail($file, $return_data = true)
{
global $g_srcfile,$g_dstfile;
$max_width = $max_height = (string)$GLOBALS['egw_info']['server']['link_list_thumbnail'] == '' ? 32 :
$GLOBALS['egw_info']['server']['link_list_thumbnail'];
//error_log(__METHOD__."() src=$g_srcfile, dst=$g_dstfile, size=$max_width");
if($max_width == 0) {
// thumbnailing disabled
return false;
} elseif( !gdVersion() ) {
// GD disabled or not installed
return false;
}
// Quality
$g_imgcomp=55;
$dst_dir = dirname($g_dstfile);
// files dont exist, if you have no access permission
if((file_exists($dst_dir) || mkdir($dst_dir, 0700, true)) && file_exists($g_srcfile)) {
$g_is=getimagesize($g_srcfile);
if($g_is[0] < $max_width && $g_is[1] < $max_height) {
$g_iw = $g_is[0];
$g_ih = $g_is[1];
} elseif(($g_is[0]-$max_width)>=($g_is[1]-$max_height)) {
$g_iw=$max_width;
$g_ih=($max_width/$g_is[0])*$g_is[1];
} else {
$g_ih=$max_height;
$g_iw=($g_ih/$g_is[1])*$g_is[0];
}
// Get mime type
list($type, $image_type) = explode('/',egw_vfs::mime_content_type($g_srcfile));
if($type != 'image') {
return false;
}
switch ($image_type) {
case 'png':
$img_src = imagecreatefrompng($g_srcfile);
break;
case 'jpg':
case 'jpeg':
$img_src = imagecreatefromjpeg($g_srcfile);
break;
case 'gif':
$img_src = imagecreatefromgif($g_srcfile);
break;
case 'bmp':
$img_src = imagecreatefromwbmp($g_srcfile);
break;
default:
return false;
}
if(!($gdVersion = gdVersion())) {
return false;
} elseif ($gdVersion >= 2) {
$img_dst=imagecreatetruecolor($g_iw,$g_ih);
imageSaveAlpha($img_dst, true);
$trans_color = imagecolorallocatealpha($img_dst, 0, 0, 0, 127);
imagefill($img_dst, 0, 0, $trans_color);
} else {
$img_dst = imagecreate($g_iw, $g_ih);
}
imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $g_iw, $g_ih, $g_is[0], $g_is[1]);
imagepng($img_dst, $g_dstfile);
return $return_data ? $img_dst : $g_dstfile;
} else {
return false;
}
}
/**
* Get which version of GD is installed, if any.
*
* Returns the version (1 or 2) of the GD extension.
* Off the php manual page, thanks Hagan Fox
*/
function gdVersion($user_ver = 0)
{
if (! extension_loaded('gd')) { return; }
static $gd_ver = 0;
// Just accept the specified setting if it's 1.
if ($user_ver == 1) { $gd_ver = 1; return 1; }
// Use the static variable if function was called previously.
if ($user_ver !=2 && $gd_ver > 0 ) { return $gd_ver; }
// Use the gd_info() function if possible.
if (function_exists('gd_info')) {
$ver_info = gd_info();
preg_match('/\d/', $ver_info['GD Version'], $match);
$gd_ver = $match[0];
return $match[0];
}
// If phpinfo() is disabled use a specified / fail-safe choice...
if (preg_match('/phpinfo/', ini_get('disable_functions'))) {
if ($user_ver == 2) {
$gd_ver = 2;
return 2;
} else {
$gd_ver = 1;
return 1;
}
}
// ...otherwise use phpinfo().
ob_start();
phpinfo(8);
$info = ob_get_contents();
ob_end_clean();
$info = stristr($info, 'gd version');
preg_match('/\d/', $info, $match);
$gd_ver = $match[0];
return $match[0];
}

View File

@ -37,7 +37,7 @@ class filemanager_hooks
$title = $GLOBALS['egw_info']['apps'][self::$appname]['title'] . ' '. lang('Menu');
$file = array(
'Your home directory' => $GLOBALS['egw']->link('/index.php',array('menuaction'=>self::$appname.'.filemanager_ui.index','path'=>$homepath)),
'Home directories' => $GLOBALS['egw']->link('/index.php',array('menuaction'=>self::$appname.'.filemanager_ui.index','path'=>$basepath)),
'User and groups' => $GLOBALS['egw']->link('/index.php',array('menuaction'=>self::$appname.'.filemanager_ui.index','path'=>$basepath)),
);
if (!empty($file_prefs['showbase']) && $file_prefs['showbase']=='yes')
{
@ -71,9 +71,12 @@ class filemanager_hooks
'Site Configuration' => $GLOBALS['egw']->link('/index.php','menuaction=admin.uiconfig.index&appname='.self::$appname),
'Custom fields' => $GLOBALS['egw']->link('/index.php','menuaction=admin.customfields.edit&appname='.self::$appname),
);
if ($location == 'admin') {
if ($location == 'admin')
{
display_section(self::$appname,$file);
} else {
}
else
{
display_sidebox(self::$appname,lang('Admin'),$file);
}
}
@ -86,7 +89,9 @@ class filemanager_hooks
if ($location == 'preferences')
{
display_section(self::$appname,$file);
} else {
}
else
{
display_sidebox(self::$appname,lang('Preferences'),$file);
}
}
@ -114,29 +119,17 @@ class filemanager_hooks
'name' => 'showbase',
'values' => $yes_no,
'label' => lang('Show link to filemanagers basedirectory (/) in side box menu?'),
'help' => lang('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' => lang('Sort folders always to the top?'),
'help' => lang('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.'),
'help' => lang('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
),
'startfolder' => array(
'type' => 'input',
'name' => 'startfolder',
'size' => 80,
'size' => 60,
'default' => '',
'label' => lang('Enter the complete VFS path to specify your desired start folder.'),
'help' => lang('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.'),
'help' => lang('The default start folder is your personal Folder. The default is used, if you leave this empty, the path does not exist or you lack the neccessary access permissions.'),
'xmlrpc' => True,
'amin' => False
),
@ -150,21 +143,18 @@ class filemanager_hooks
# 'admin' => False
# ),
);
for ($i=1;$i<=self::$foldercount;$i++) {
for ($i=1; $i <= self::$foldercount; $i++)
{
$GLOBALS['settings']['folderlink'.$i] = array(
'type' => 'input',
'name' => 'folderlink'.$i,
'size' => 80,
'size' => 60,
'default' => '',
'label' => lang('Enter the complete VFS path to specify a fast access link to a folder').' ('.$i.').',
'help' => lang('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;
}
}

View File

@ -194,7 +194,8 @@ class filemanager_ui
$sel_options['filter'] = array(
'1' => 'Current directory',
'' => 'All subdirectories',
'2' => 'Directories sorted in',
'' => 'Files from subdirectories',
);
$tpl->exec('filemanager.filemanager_ui.index',$content,$sel_options,$readonlys,array('nm' => $content['nm']));
}
@ -402,14 +403,11 @@ 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 ($GLOBALS['egw_info']['user']['preferences']['filemanager']['alwayssortfolderstotop']=='yes') {
$dirs = array();
$files = array();
foreach(egw_vfs::find($query['path'],array(
'type'=>'d',
'mindepth' => 1,
'maxdepth' => $query['filter'] ? $query['filter'] : null,
'maxdepth' => $query['filter'] ? (int)(boolean)$query['filter'] : null,
'dirsontop' => $query['filter'] <= 1,
'type' => $query['filter'] ? null : 'f',
'order' => $query['order'], 'sort' => $query['sort'],
'limit' => (int)$query['num_rows'].','.(int)$query['start'],
'need_mime' => true,
@ -417,89 +415,6 @@ class filemanager_ui
),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(
'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))
{
if ($row['mime'] == egw_vfs::DIR_MIME_TYPE)
{
$row['link'] = '/index.php?menuaction=filemanager.filemanager_ui.index&path='.$path;
}
else
{
$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']);
//echo $path; _debug_array($row);
$rows[++$n] = $row;
@ -515,7 +430,6 @@ class filemanager_ui
$readonlys["delete[$path]"] = true; // no rights to delete the file
}
}
}
// query comments and cf's for the displayed rows
$cols_to_show = explode(',',$GLOBALS['egw_info']['user']['preferences']['filemanager']['nextmatch-filemanager.index.rows']);
$cfs = config::get_customfields('filemanager');

View File

@ -14,8 +14,7 @@ accessrights filemanager de Zugangsberechtigungen
acl added. filemanager de Zugrifsrecht hinzugefügt.
acl deleted. filemanager de Zugrifsrecht gelöscht.
actions filemanager de Befehle
all subdirectories filemanager de Alle Unterverzeichnisse
allow a maximum of the above configured folderlinks to be configured in settings admin de erlaube das oben eingestellte Maximum an Konfigurationsoptionen im Setting für Links zu Verzeichnissen
allow a maximum of the above configured folderlinks to be configured in settings admin de erlaube das oben eingestellte Maximum an Einstellunge für Verzeichnisverweise
and all it's childeren filemanager de und alle seine Kinder
basedirectory filemanager de Basisverzeichnis
cancel editing %1 without saving filemanager de Beende das Bearbeiten von %1 ohne zu Speichern
@ -46,8 +45,10 @@ created directory %1 filemanager de Verzeichis %1 erstellt
current directory filemanager de Aktuelles Verzeichnis
cut filemanager de Ausschneiden
cut to clipboard filemanager de Ausschneiden in die Zwischenablage
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. filemanager de Vorgabe is NEIN. Der Verweis wird nicht angezeit, Sie können aber immer zu diesem Verzeichnis navigieren, oder Sie konfigurieren das Verzeichnis als Startverzeichnis oder als Verzeichnisverweis.
delete this file or directory filemanager de Datei oder Verzeichnis löschen
deleted %1 filemanager de %1 gelöscht
directories sorted in filemanager de Verzeichnisse einsortiert
directory filemanager de Verzeichnis
directory %1 already exists filemanager de Verzeichnis %1 existiert bereits
directory %1 does not exist filemanager de Verzeichnis %1 existiert nicht
@ -58,8 +59,8 @@ display of content filemanager de Anzeigen des Inhaltes
download filemanager de Herunterladen
edit comments filemanager de Kommentare bearbeiten
edit settings filemanager de Einstellungen bearbeiten
enter the complete vfs path to specify a fast access link to a folder filemanager de Geben Sie den kompletten VFS Pfad ein, um einen Link zu diesem Ordner im Seitenmenu zu erzeugen
enter the complete vfs path to specify your desired start folder. filemanager de Geben Sie den kompletten VFS Pfad zu Ihrem gewünschten Anfangs/Startverzeichnis ein
enter the complete vfs path to specify a fast access link to a folder filemanager de Geben Sie den kompletten VFS Pfad ein, um einen Verweis zu diesem Ordner im Seitenmenu zu erzeugen
enter the complete vfs path to specify your desired start folder. filemanager de Geben Sie den kompletten VFS Pfad zu Ihrem gewünschten Anfangsverzeichnis ein
error adding the acl! filemanager de Fehler beim Hinzufügen des Zugriffsrechts!
error deleting the acl entry! filemanager de Fehler beim Löschen des Zugriffsrechts!
error uploading file! filemanager de Fehler beim Hochladen der Datei!
@ -77,6 +78,7 @@ file or directory not found! filemanager de Datei oder Verzeichnis nicht gefunde
file successful uploaded. filemanager de Datei erfolgreich hochgeladen.
filemanager common de Dateimanager
filemanager configuration admin de Dateimanager Konfiguration
files from subdirectories filemanager de Dateien von Unterverzeichnissen
files in this directory filemanager de Dateien in diesem Verzeichnis
folder up filemanager de darüberliegendes Verzeichnis
general filemanager de Allgemein
@ -84,7 +86,6 @@ go home filemanager de Heimatverzeichnis
go to filemanager de Gehe zu
go to your home directory filemanager de Zu Ihrem Heimverzeichnis wechseln
go up filemanager de in das darüber liegende Verzeichnis wechseln
home directories filemanager de Persönliche Verzeichnisse
id filemanager de Id
inherited filemanager de Geerbt
link %1: %2 filemanager de %1. Verknüpfung: %2
@ -134,18 +135,19 @@ select file to upload in current directory filemanager de Datei zum hochladen in
show filemanager de Zeige
show link to filemanagers basedirectory (/) in side box menu? filemanager de Zeige die Verknüpfung zum Basisverzeichnis (/) des Dateimanagers im Seitenmenu?
size filemanager de Größe
sort folders always to the top? filemanager de Sortiere Verzeichnisse immer an den Anfang der Verzeichnisansicht
start search filemanager de Suche starten
the default start folder is your personal folder. the default is used, if you leave this empty, the path does not exist or you lack the neccessary access permissions. filemanager de Die Vorgabe für das Anfangsverzeichnis ist Ihr perönlicher Ordner. Die Vorgabe wird benutzt, wenn Sie hier nichts eintragen, der Pfad nicht existiert oder Ihnen die notwending Zugriffsrechte fehlen.
the requested path %1 is not available. filemanager de Der angeforderte Verzeichnispfad %1 steht nicht zur Verfügung.
total files filemanager de Gesamtanzahl Dateien
unused space filemanager de Nicht benutzter Platz
up filemanager de Nach oben
updated comment for %1 filemanager de Kommentar für %1 aktualisiert
used space filemanager de Benutzter Platz
users and groups filemanager de Benutzer und Gruppen
you do not have access to %1 filemanager de Sie besitzen keine Zugriffsrechte für %1
you need to select an owner! filemanager de Sie müssen einen Eigentümer auswählen!
you need to select some files first! filemanager de Sie müssen zuerst die Dateien auswählen!
you will be redirected to your home directory. filemanager de Sie werden zu Ihrem Heimatverzeichnis geleitet
you will be redirected to your start folder. filemanager de Sie werden zu Ihrem Anfangs/Startverzeichnis geleitet
your home dir did not exist, egroupware created a new one. filemanager de Ihr Heimatverzeichnis hat nicht existiert. eGroupware hat ein neues für Sie angelegt
your home dir did not exist, egroupware created a new one. filemanager de Ihr Heimatverzeichnis hat nicht existiert. eGroupware hat ein neues für Sie angelegt.
your home directory filemanager de Ihr persönliches Verzeichnis

View File

@ -14,7 +14,6 @@ accessrights filemanager en Accessrights
acl added. filemanager en ACL added.
acl deleted. filemanager en ACL deleted.
actions filemanager en Actions
all subdirectories filemanager en All subdirectories
allow a maximum of the above configured folderlinks to be configured in settings admin en allow a maximum of the above configured folderlinks to be configured in settings
and all it's childeren filemanager en and all it's childeren
basedirectory filemanager en Basedirectory
@ -46,8 +45,10 @@ created directory %1 filemanager en Created directory %1
current directory filemanager en Current directory
cut filemanager en cut
cut to clipboard filemanager en Cut to clipboard
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. filemanager en 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.
delete this file or directory filemanager en Delete this file or directory
deleted %1 filemanager en Deleted %1
directories sorted in filemanager en Directories sorted in
directory filemanager en Directory
directory %1 already exists filemanager en Directory %1 already exists
directory %1 does not exist filemanager en Directory %1 does not exist
@ -77,6 +78,7 @@ file or directory not found! filemanager en File or directory not found!
file successful uploaded. filemanager en File successful uploaded.
filemanager common en Filemanager
filemanager configuration admin en filemanager configuration
files from subdirectories filemanager en Files from subdirectories
files in this directory filemanager en Files in this directory
folder up filemanager en Folder Up
general filemanager en General
@ -84,7 +86,6 @@ go home filemanager en go home
go to filemanager en Go to
go to your home directory filemanager en Go to your home directory
go up filemanager en go up
home directories filemanager en Home directories
id filemanager en Id
inherited filemanager en Inherited
link %1: %2 filemanager en Link %1: %2
@ -134,14 +135,15 @@ select file to upload in current directory filemanager en Select file to upload
show filemanager en Show
show link to filemanagers basedirectory (/) in side box menu? filemanager en Show link to filemanagers basedirectory (/) in side box menu?
size filemanager en Size
sort folders always to the top? filemanager en Sort folders always to the top?
start search filemanager en start search
the default start folder is your personal folder. the default is used, if you leave this empty, the path does not exist or you lack the neccessary access permissions. filemanager en The default start folder is your personal Folder. The default is used, if you leave this empty, the path does not exist or you lack the neccessary access permissions.
the requested path %1 is not available. filemanager en The requested path %1 is not available.
total files filemanager en Total Files
unused space filemanager en Unused space
up filemanager en Up
updated comment for %1 filemanager en Updated comment for %1
used space filemanager en Used space
users and groups filemanager en Users and groups
you do not have access to %1 filemanager en You do not have access to %1
you need to select an owner! filemanager en You need to select an owner!
you need to select some files first! filemanager en You need to select some files first!

View File

@ -2,7 +2,7 @@
/**
* eGroupWare - eTemplates for Application filemanager
* http://www.egroupware.org
* generated by soetemplate::dump4setup() 2008-10-05 19:27
* generated by soetemplate::dump4setup() 2008-10-06 19:59
*
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package filemanager
@ -26,7 +26,7 @@ $templ_data[] = array('name' => 'filemanager.file.general','template' => '','lan
$templ_data[] = array('name' => 'filemanager.file.general','template' => '','lang' => '','group' => '0','version' => '1.5.002','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:8:{i:0;a:2:{s:1:"A";s:2:"80";s:2:"h1";s:2:"60";}i:1;a:2:{s:1:"A";a:4:{s:4:"type";s:5:"image";s:4:"name";s:4:"icon";s:4:"span";s:9:",mimeHuge";s:5:"align";s:6:"center";}s:1:"B";a:5:{s:4:"type";s:4:"text";s:4:"name";s:4:"name";s:6:"needed";s:1:"1";s:4:"span";s:9:",fileName";s:8:"onchange";s:94:"xajax_doXMLHTTP(\'filemanager_ui::ajax_check_rename_target\',document.location.href,this.value);";}}i:2;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"hrule";s:4:"span";s:3:"all";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:3;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Type";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:4:"name";s:4:"mime";}}i:4;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:9:"Directory";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:4:"name";s:3:"dir";}}i:5;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Size";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:4:"name";s:5:"hsize";s:5:"label";s:17:"%s ($cont[size]b)";}}i:6;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Created";}s:1:"B";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:5:"ctime";s:8:"readonly";s:1:"1";}}i:7;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Modified";}s:1:"B";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:5:"mtime";s:8:"readonly";s:1:"1";}}}s:4:"rows";i:7;s:4:"cols";i:2;s:4:"size";s:12:"450,300,,,10";s:7:"options";a:3:{i:0;s:3:"450";i:1;s:3:"300";i:4;s:2:"10";}}}','size' => '450,300,,,10','style' => '','modified' => '1204554817',);
$templ_data[] = array('name' => 'filemanager.file.general','template' => '','lang' => '','group' => '0','version' => '1.5.003','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:9:{i:0;a:2:{s:1:"A";s:2:"80";s:2:"h1";s:2:"60";}i:1;a:2:{s:1:"A";a:4:{s:4:"type";s:5:"image";s:4:"name";s:4:"icon";s:4:"span";s:9:",mimeHuge";s:5:"align";s:6:"center";}s:1:"B";a:5:{s:4:"type";s:4:"text";s:4:"name";s:4:"name";s:6:"needed";s:1:"1";s:4:"span";s:9:",fileName";s:8:"onchange";s:94:"xajax_doXMLHTTP(\'filemanager_ui::ajax_check_rename_target\',document.location.href,this.value);";}}i:2;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"hrule";s:4:"span";s:3:"all";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:3;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Type";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:4:"name";s:4:"mime";}}i:4;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:9:"Directory";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:4:"name";s:3:"dir";}}i:5;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Size";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:4:"name";s:5:"hsize";s:5:"label";s:17:"%s ($cont[size]b)";}}i:6;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Created";}s:1:"B";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:5:"ctime";s:8:"readonly";s:1:"1";}}i:7;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Modified";}s:1:"B";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:5:"mtime";s:8:"readonly";s:1:"1";}}i:8;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:10:",,,comment";s:5:"label";s:7:"Comment";}s:1:"B";a:3:{s:4:"type";s:8:"textarea";s:4:"name";s:7:"comment";s:4:"span";s:8:",comment";}}}s:4:"rows";i:8;s:4:"cols";i:2;s:4:"size";s:12:"450,300,,,10";s:7:"options";a:3:{i:0;s:3:"450";i:1;s:3:"300";i:4;s:2:"10";}}}','size' => '450,300,,,10','style' => '','modified' => '1204554817',);
$templ_data[] = array('name' => 'filemanager.file.general','template' => '','lang' => '','group' => '0','version' => '1.5.003','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:9:{i:0;a:2:{s:1:"A";s:2:"80";s:2:"h1";s:2:"60";}i:1;a:2:{s:1:"A";a:4:{s:4:"type";s:5:"image";s:4:"name";s:4:"icon";s:4:"span";s:9:",mimeHuge";s:5:"align";s:6:"center";}s:1:"B";a:5:{s:4:"type";s:4:"text";s:4:"name";s:4:"name";s:6:"needed";s:1:"1";s:4:"span";s:9:",fileName";s:8:"onchange";s:94:"xajax_doXMLHTTP(\'filemanager_ui::ajax_check_rename_target\',document.location.href,this.value);";}}i:2;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"hrule";s:4:"span";s:3:"all";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:3;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Type";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:4:"name";s:4:"mime";}}i:4;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:9:"Directory";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:4:"name";s:3:"dir";}}i:5;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Size";}s:1:"B";a:3:{s:4:"type";s:8:"vfs-size";s:4:"name";s:4:"size";s:4:"size";s:1:"1";}}i:6;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Created";}s:1:"B";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:5:"ctime";s:8:"readonly";s:1:"1";}}i:7;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Modified";}s:1:"B";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:5:"mtime";s:8:"readonly";s:1:"1";}}i:8;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:10:",,,comment";s:5:"label";s:7:"Comment";}s:1:"B";a:3:{s:4:"type";s:8:"textarea";s:4:"name";s:7:"comment";s:4:"span";s:8:",comment";}}}s:4:"rows";i:8;s:4:"cols";i:2;s:4:"size";s:12:"450,300,,,10";s:7:"options";a:3:{i:0;s:3:"450";i:1;s:3:"300";i:4;s:2:"10";}}}','size' => '450,300,,,10','style' => '','modified' => '1204554817',);
$templ_data[] = array('name' => 'filemanager.file.perms','template' => '','lang' => '','group' => '0','version' => '1.5.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:4:{i:0;a:1:{s:2:"h3";s:9:",!@is_dir";}i:1;a:1:{s:1:"A";a:4:{s:4:"type";s:8:"groupbox";s:4:"size";s:1:"1";s:5:"label";s:12:"Accessrights";i:1;a:5:{s:4:"type";s:4:"grid";s:4:"data";a:6:{i:0;a:3:{s:1:"A";s:2:"80";s:2:"h5";s:2:",1";s:2:"h4";s:8:",@is_dir";}i:1;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Owner";}s:1:"B";a:2:{s:4:"type";s:6:"select";s:4:"name";s:12:"perms[owner]";}}i:2;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Group";}s:1:"B";a:2:{s:4:"type";s:6:"select";s:4:"name";s:12:"perms[group]";}}i:3;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Other";}s:1:"B";a:2:{s:4:"type";s:6:"select";s:4:"name";s:12:"perms[other]";}}i:4;a:2:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:8:"checkbox";s:5:"label";s:10:"Executable";s:4:"name";s:17:"perms[executable]";}}i:5;a:2:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:8:"checkbox";s:5:"label";s:43:"Only owner can rename or delete the content";s:4:"name";s:13:"perms[sticky]";}}}s:4:"rows";i:5;s:4:"cols";i:2;s:7:"options";a:0:{}}}}i:2;a:1:{s:1:"A";a:4:{s:4:"type";s:8:"groupbox";s:4:"size";s:1:"1";s:5:"label";s:5:"Owner";i:1;a:5:{s:4:"type";s:4:"grid";s:7:"options";a:0:{}s:4:"data";a:3:{i:0;a:1:{s:1:"A";s:2:"80";}i:1;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"User";}s:1:"B";a:4:{s:4:"type";s:14:"select-account";s:4:"size";s:13:"root,accounts";s:4:"name";s:3:"uid";s:5:"label";s:12:"@ro_uid_root";}}i:2;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Group";}s:1:"B";a:4:{s:4:"type";s:14:"select-account";s:4:"size";s:11:"root,groups";s:4:"name";s:3:"gid";s:5:"label";s:12:"@ro_gid_root";}}}s:4:"rows";i:2;s:4:"cols";i:2;}}}i:3;a:1:{s:1:"A";a:3:{s:4:"type";s:8:"checkbox";s:5:"label";s:43:"Modify all Subdirectories and their content";s:4:"name";s:11:"modify_subs";}}}s:4:"rows";i:3;s:4:"cols";i:1;s:4:"size";s:12:"450,300,,,10";s:7:"options";a:3:{i:0;s:3:"450";i:1;s:3:"300";i:4;s:2:"10";}}}','size' => '450,300,,,10','style' => '','modified' => '1204567746',);
@ -38,6 +38,8 @@ $templ_data[] = array('name' => 'filemanager.index','template' => '','lang' => '
$templ_data[] = array('name' => 'filemanager.index.rows','template' => '','lang' => '','group' => '0','version' => '1.5.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:6:{s:2:"c1";s:2:"th";s:2:"c2";s:3:"row";s:1:"B";s:3:"30%";s:1:"D";s:3:"120";s:1:"E";s:3:"120";s:1:"K";s:2:"70";}i:1;a:11:{s:1:"A";a:4:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:4:"Type";s:4:"name";s:4:"mime";s:5:"align";s:6:"center";}s:1:"B";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:4:"Name";s:4:"name";s:4:"name";}s:1:"C";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:4:"Size";s:4:"name";s:4:"size";}s:1:"D";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:8:"Modified";s:4:"name";s:5:"mtime";}s:1:"E";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:7:"Created";s:4:"name";s:5:"ctime";}s:1:"F";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:11:"Permissions";s:4:"name";s:4:"mode";}s:1:"G";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:4:"name";s:3:"uid";s:5:"label";s:5:"Owner";}s:1:"H";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:4:"name";s:3:"gid";s:5:"label";s:5:"Group";}s:1:"I";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:7:"Comment";s:4:"name";s:7:"comment";}s:1:"J";a:3:{s:4:"type";s:22:"nextmatch-customfields";s:8:"readonly";s:1:"1";s:4:"name";s:12:"customfields";}s:1:"K";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:6:"2,,0,0";i:1;a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Actions";}i:2;a:8:{s:4:"type";s:6:"button";s:4:"size";s:5:"check";s:5:"label";s:9:"Check all";s:4:"name";s:9:"check_all";s:4:"help";s:9:"Check all";s:7:"onclick";s:60:"toggle_all(this.form,form::name(\'checked[]\')); return false;";s:6:"needed";s:1:"1";s:5:"align";s:5:"right";}}}i:2;a:11:{s:1:"A";a:4:{s:4:"type";s:5:"image";s:5:"label";s:15:"$row_cont[mime]";s:4:"name";s:12:"${row}[icon]";s:5:"align";s:6:"center";}s:1:"B";a:4:{s:4:"type";s:5:"label";s:4:"size";s:14:",@${row}[link]";s:4:"name";s:12:"${row}[name]";s:7:"no_lang";s:1:"1";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:4:"name";s:13:"${row}[hsize]";s:5:"align";s:5:"right";}s:1:"D";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:13:"${row}[mtime]";s:8:"readonly";s:1:"1";}s:1:"E";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:13:"${row}[ctime]";s:8:"readonly";s:1:"1";}s:1:"F";a:3:{s:4:"type";s:5:"label";s:5:"label";s:16:"$row_cont[perms]";s:4:"span";s:6:",perms";}s:1:"G";a:3:{s:4:"type";s:5:"label";s:4:"name";s:12:"${row}[user]";s:7:"no_lang";s:1:"1";}s:1:"H";a:3:{s:4:"type";s:5:"label";s:4:"name";s:13:"${row}[group]";s:7:"no_lang";s:1:"1";}s:1:"I";a:2:{s:4:"type";s:5:"label";s:4:"name";s:15:"${row}[comment]";}s:1:"J";a:3:{s:4:"type";s:17:"customfields-list";s:8:"readonly";s:1:"1";s:4:"name";s:4:"$row";}s:1:"K";a:6:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";i:1;a:6:{s:4:"type";s:6:"button";s:4:"size";s:4:"edit";s:5:"label";s:13:"Edit settings";s:4:"name";s:21:"edit[$row_cont[path]]";s:4:"help";s:39:"Rename, change permissions or ownership";s:7:"onclick";s:192:"window.open(egw::link(\'/index.php\',\'menuaction=filemanager.filemanager_ui.file&path=$row_cont[path]\'),\'fileprefs\',\'dependent=yes,width=495,height=400,scrollbars=yes,status=yes\'); return false;";}i:2;a:7:{s:4:"type";s:6:"button";s:4:"name";s:23:"delete[$row_cont[path]]";s:4:"size";s:6:"delete";s:5:"label";s:6:"Delete";s:4:"help";s:29:"Delete this file or directory";s:7:"onclick";s:48:"return confirm(\'Delete this file or directory\');";s:5:"align";s:6:"center";}i:3;a:4:{s:4:"type";s:8:"checkbox";s:4:"name";s:9:"checked[]";s:5:"align";s:5:"right";s:4:"size";s:15:"$row_cont[path]";}s:5:"align";s:5:"right";}}}s:4:"rows";i:2;s:4:"cols";i:11;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '','modified' => '1204370567',);
$templ_data[] = array('name' => 'filemanager.index.rows','template' => '','lang' => '','group' => '0','version' => '1.5.002','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:6:{s:2:"c1";s:2:"th";s:2:"c2";s:3:"row";s:1:"B";s:3:"30%";s:1:"D";s:3:"120";s:1:"E";s:3:"120";s:1:"K";s:2:"70";}i:1;a:11:{s:1:"A";a:4:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:4:"Type";s:4:"name";s:4:"mime";s:5:"align";s:6:"center";}s:1:"B";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:4:"Name";s:4:"name";s:4:"name";}s:1:"C";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:4:"Size";s:4:"name";s:4:"size";}s:1:"D";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:8:"Modified";s:4:"name";s:5:"mtime";}s:1:"E";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:7:"Created";s:4:"name";s:5:"ctime";}s:1:"F";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:11:"Permissions";s:4:"name";s:4:"mode";}s:1:"G";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:4:"name";s:3:"uid";s:5:"label";s:5:"Owner";}s:1:"H";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:4:"name";s:3:"gid";s:5:"label";s:5:"Group";}s:1:"I";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:7:"Comment";s:4:"name";s:7:"comment";}s:1:"J";a:3:{s:4:"type";s:22:"nextmatch-customfields";s:8:"readonly";s:1:"1";s:4:"name";s:12:"customfields";}s:1:"K";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:6:"2,,0,0";i:1;a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Actions";}i:2;a:8:{s:4:"type";s:6:"button";s:4:"size";s:5:"check";s:5:"label";s:9:"Check all";s:4:"name";s:9:"check_all";s:4:"help";s:9:"Check all";s:7:"onclick";s:60:"toggle_all(this.form,form::name(\'checked[]\')); return false;";s:6:"needed";s:1:"1";s:5:"align";s:5:"right";}}}i:2;a:11:{s:1:"A";a:3:{s:4:"type";s:8:"vfs-mime";s:4:"name";s:12:"${row}[path]";s:5:"align";s:6:"center";}s:1:"B";a:3:{s:4:"type";s:3:"vfs";s:4:"name";s:4:"$row";s:7:"no_lang";s:1:"1";}s:1:"C";a:3:{s:4:"type";s:8:"vfs-size";s:4:"name";s:12:"${row}[size]";s:5:"align";s:5:"right";}s:1:"D";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:13:"${row}[mtime]";s:8:"readonly";s:1:"1";}s:1:"E";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:13:"${row}[ctime]";s:8:"readonly";s:1:"1";}s:1:"F";a:2:{s:4:"type";s:8:"vfs-mode";s:4:"name";s:12:"${row}[mode]";}s:1:"G";a:3:{s:4:"type";s:7:"vfs-uid";s:4:"name";s:11:"${row}[uid]";s:7:"no_lang";s:1:"1";}s:1:"H";a:3:{s:4:"type";s:7:"vfs-gid";s:4:"name";s:11:"${row}[gid]";s:7:"no_lang";s:1:"1";}s:1:"I";a:2:{s:4:"type";s:5:"label";s:4:"name";s:15:"${row}[comment]";}s:1:"J";a:3:{s:4:"type";s:17:"customfields-list";s:8:"readonly";s:1:"1";s:4:"name";s:4:"$row";}s:1:"K";a:6:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";i:1;a:6:{s:4:"type";s:6:"button";s:4:"size";s:4:"edit";s:5:"label";s:13:"Edit settings";s:4:"name";s:21:"edit[$row_cont[path]]";s:4:"help";s:39:"Rename, change permissions or ownership";s:7:"onclick";s:192:"window.open(egw::link(\'/index.php\',\'menuaction=filemanager.filemanager_ui.file&path=$row_cont[path]\'),\'fileprefs\',\'dependent=yes,width=495,height=400,scrollbars=yes,status=yes\'); return false;";}i:2;a:7:{s:4:"type";s:6:"button";s:4:"name";s:23:"delete[$row_cont[path]]";s:4:"size";s:6:"delete";s:5:"label";s:6:"Delete";s:4:"help";s:29:"Delete this file or directory";s:7:"onclick";s:48:"return confirm(\'Delete this file or directory\');";s:5:"align";s:6:"center";}i:3;a:4:{s:4:"type";s:8:"checkbox";s:4:"name";s:9:"checked[]";s:5:"align";s:5:"right";s:4:"size";s:15:"$row_cont[path]";}s:5:"align";s:5:"right";}}}s:4:"rows";i:2;s:4:"cols";i:11;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '','modified' => '1204370567',);
$templ_data[] = array('name' => 'filemanager.search','template' => '','lang' => '','group' => '0','version' => '1.3.001','data' => 'a:4:{i:0;a:9:{s:4:"type";s:8:"groupbox";s:4:"name";s:10:"debuginfos";s:4:"size";s:1:"4";s:5:"label";s:10:"Debuginfos";s:8:"disabled";s:1:"1";i:1;a:3:{s:4:"type";s:8:"textarea";s:4:"name";s:7:"message";s:8:"readonly";s:1:"1";}i:2;a:1:{s:4:"type";s:5:"label";}i:3;a:1:{s:4:"type";s:5:"label";}i:4;a:1:{s:4:"type";s:5:"label";}}i:1;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:7:{i:0;a:2:{s:1:"C";s:3:"120";s:1:"D";s:3:"120";}i:1;a:5:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:12:"searchstring";s:4:"name";s:17:"searchstringlabel";}s:1:"B";a:3:{s:4:"type";s:4:"text";s:4:"span";s:1:"2";s:4:"name";s:12:"searchstring";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:3:{s:4:"type";s:6:"button";s:5:"label";s:12:"start search";s:4:"name";s:12:"start_search";}s:1:"E";a:1:{s:4:"type";s:5:"label";}}i:2;a:5:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:9:"mime type";}s:1:"B";a:2:{s:4:"type";s:8:"checkbox";s:4:"name";s:8:"checkall";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:3:"All";s:4:"name";s:8:"alllabel";}s:1:"D";a:4:{s:4:"type";s:5:"label";s:4:"data";a:2:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:3:{s:4:"type";s:8:"checkbox";s:5:"label";s:5:"files";s:4:"name";s:14:"checkonlyfiles";}}}s:4:"rows";i:1;s:4:"cols";i:1;}s:1:"E";a:1:{s:4:"type";s:5:"label";}}i:3;a:5:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:2:{s:4:"type";s:8:"checkbox";s:4:"name";s:14:"checkonlyfiles";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:5:"files";s:4:"name";s:9:"filelabel";}s:1:"D";a:4:{s:4:"type";s:6:"button";s:5:"label";s:12:"clear search";s:4:"name";s:12:"clear_search";s:7:"onclick";s:71:"menuaction=filemanager.uifilemanager.index&action=search&actioncd=clear";}s:1:"E";a:1:{s:4:"type";s:5:"label";}}i:4;a:5:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:2:{s:4:"type";s:8:"checkbox";s:4:"name";s:13:"checkonlydirs";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:9:"directory";s:4:"name";s:8:"dirlabel";}s:1:"D";a:4:{s:4:"type";s:8:"checkbox";s:5:"label";s:5:"Debug";s:4:"name";s:5:"debug";s:8:"disabled";s:1:"1";}s:1:"E";a:1:{s:4:"type";s:5:"label";}}i:5;a:5:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:15:"created between";s:4:"name";s:12:"createdlabel";}s:1:"B";a:2:{s:4:"type";s:8:"checkbox";s:4:"name";s:13:"searchcreated";}s:1:"C";a:3:{s:4:"type";s:4:"date";s:4:"name";s:15:"datecreatedfrom";s:4:"size";s:2:",8";}s:1:"D";a:3:{s:4:"type";s:4:"date";s:4:"name";s:13:"datecreatedto";s:4:"size";s:2:",8";}s:1:"E";a:4:{s:4:"type";s:8:"textarea";s:4:"name";s:17:"searchcreatedtext";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";}}i:6;a:5:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:16:"modified between";s:4:"name";s:13:"modifiedlabel";}s:1:"B";a:2:{s:4:"type";s:8:"checkbox";s:4:"name";s:14:"searchmodified";}s:1:"C";a:3:{s:4:"type";s:4:"date";s:4:"name";s:16:"datemodifiedfrom";s:4:"size";s:2:",8";}s:1:"D";a:3:{s:4:"type";s:4:"date";s:4:"name";s:14:"datemodifiedto";s:4:"size";s:2:",8";}s:1:"E";a:4:{s:4:"type";s:8:"textarea";s:4:"name";s:18:"searchmodifiedtext";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:6;s:4:"cols";i:5;}i:2;a:1:{s:4:"type";s:5:"hrule";}i:3;a:3:{s:4:"type";s:9:"nextmatch";s:4:"size";s:4:"rows";s:4:"name";s:2:"nm";}}','size' => '','style' => '','modified' => '1173101430',);
$templ_data[] = array('name' => 'filemanager.search.rows','template' => '','lang' => '','group' => '0','version' => '','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:2:{s:2:"c1";s:2:"th";s:2:"c2";s:3:"row";}i:1;a:8:{s:1:"A";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:2:"Id";s:4:"name";s:11:"vfs_file_id";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:5:"label";s:4:"file";s:4:"name";s:7:"fulldir";}s:1:"C";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:9:"Directory";s:4:"name";s:13:"vfs_directory";}s:1:"D";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:4:"name";s:4:"name";s:8:"vfs_name";}s:1:"E";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:7:"comment";s:4:"name";s:11:"vfs_comment";}s:1:"F";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:9:"mime type";s:4:"name";s:13:"vfs_mime_type";}s:1:"G";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:7:"created";s:4:"name";s:11:"vfs_created";}s:1:"H";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:8:"modified";s:4:"name";s:12:"vfs_modified";}}i:2;a:8:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"name";s:19:"${row}[vfs_file_id]";s:7:"no_lang";s:1:"1";}s:1:"B";a:3:{s:4:"type";s:4:"html";s:4:"name";s:15:"${row}[fulldir]";s:7:"no_lang";s:1:"1";}s:1:"C";a:3:{s:4:"type";s:4:"html";s:4:"name";s:21:"${row}[vfs_directory]";s:7:"no_lang";s:1:"1";}s:1:"D";a:3:{s:4:"type";s:5:"label";s:4:"name";s:16:"${row}[vfs_name]";s:7:"no_lang";s:1:"1";}s:1:"E";a:3:{s:4:"type";s:5:"label";s:4:"name";s:19:"${row}[vfs_comment]";s:7:"no_lang";s:1:"1";}s:1:"F";a:3:{s:4:"type";s:5:"label";s:4:"name";s:21:"${row}[vfs_mime_type]";s:7:"no_lang";s:1:"1";}s:1:"G";a:3:{s:4:"type";s:5:"label";s:4:"name";s:19:"${row}[vfs_created]";s:7:"no_lang";s:1:"1";}s:1:"H";a:3:{s:4:"type";s:5:"label";s:4:"name";s:20:"${row}[vfs_modified]";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:2;s:4:"cols";i:8;s:4:"size";s:9:"100%,auto";s:7:"options";a:2:{i:0;s:4:"100%";i:1;s:4:"auto";}}}','size' => '100%,auto','style' => '','modified' => '1173104345',);

View File

@ -2,7 +2,6 @@
* CSS for new eTemplate filemanager UI
*/
.perms { font-family: monospace; font-weight: bold; }
.address input { font-size: 140%; font-weight: bold; }
.mimeHuge img { width: 64px; height: 64px; }
.fileName input { font-weight: bold; width: 100%; }

View File

@ -25,7 +25,7 @@
</row>
<row>
<description value="Size"/>
<description id="hsize" value="%s ($cont[size]b)"/>
<vfs-size id="size" options="1"/>
</row>
<row>
<description value="Created"/>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 396 B

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!-- $Id$ -->
<overlay>
<template id="filemanager.index.rows" template="" lang="" group="0" version="1.5.001">
<template id="filemanager.index.rows" template="" lang="" group="0" version="1.5.002">
<grid width="100%">
<columns>
<column/>
@ -34,14 +34,14 @@
</hbox>
</row>
<row class="row">
<image label="$row_cont[mime]" src="${row}[icon]" align="center"/>
<description options=",@${row}[link]" id="${row}[name]" no_lang="1"/>
<description id="${row}[hsize]" align="right"/>
<vfs-mime id="${row}[path]" align="center"/>
<vfs id="$row" no_lang="1"/>
<vfs-size id="${row}[size]" align="right"/>
<date-time id="${row}[mtime]" readonly="true"/>
<date-time id="${row}[ctime]" readonly="true"/>
<description value="$row_cont[perms]" class="perms"/>
<description id="${row}[user]" no_lang="1"/>
<description id="${row}[group]" no_lang="1"/>
<vfs-mode id="${row}[mode]"/>
<vfs-uid id="${row}[uid]" no_lang="1"/>
<vfs-gid id="${row}[gid]" no_lang="1"/>
<description id="${row}[comment]"/>
<customfields-list readonly="true" id="$row"/>
<hbox align="right">

View File

@ -698,15 +698,15 @@ class egw_link extends solink
/**
* path to the attached files of $app/$ip or the directory for $app if no $id,$file given
*
* All link-files are based in the vfs-subdir '/infolog'. For other apps
* separate subdirs with name app are created.
* All link-files are based in the vfs-subdir '/apps/'.$app
*
* @param string $app appname
* @param string $id='' id in $app
* @param string $file='' filename
* @param boolean $just_the_path=false return url or just the vfs path
* @return string/array path or array with path and relatives, depending on $relatives
*/
static function vfs_path($app,$id='',$file='')
static function vfs_path($app,$id='',$file='',$just_the_path=false)
{
$path = self::VFS_BASEURL;
@ -724,7 +724,14 @@ class egw_link extends solink
}
}
}
if ($just_the_path)
{
$path = parse_url($path,PHP_URL_PATH);
}
else
{
$path = egw_vfs::resolve_url($path);
}
//error_log(__METHOD__."($app,$id,$file)=$path");
return $path;
}
@ -741,7 +748,6 @@ class egw_link extends solink
* $file['path'] path of the file on the client computer
* $file['ip'] of the client (path and ip are only needed if u want a symlink (if possible))
* @param string $comment='' comment to add to the link
* @todo remark/comment from the vfs
* @return int negative id of egw_sqlfs table as negative link-id's are for vfs attachments
*/
static function attach_file($app,$id,$file,$comment='')
@ -753,15 +759,16 @@ class egw_link extends solink
}
if (file_exists($entry_dir) || ($Ok = mkdir($entry_dir,0,true)))
{
$Ok = copy($file['tmp_name'],$fname = egw_vfs::concat($entry_dir,$file['name'])) &&
($stat = links_stream_wrapper::url_stat($fname,0));
if (($Ok = copy($file['tmp_name'],$fname = egw_vfs::concat($entry_dir,$file['name'])) &&
($stat = links_stream_wrapper::url_stat($fname,0))) && $comment)
{
egw_vfs::proppatch(parse_url($fname,PHP_URL_PATH),array(array('name'=>'comment','val'=>$comment))); // set comment
}
}
else
{
error_log(__METHOD__."($app,$id,$file,$comment) Can't mkdir $entry_dir!");
}
// todo: set comment
return $Ok ? -$stat['ino'] : false;
}
@ -831,7 +838,6 @@ class egw_link extends solink
* converts a fileinfo (row in the vfs-db-table) in a link
*
* @param array/int $fileinfo a row from the vfs-db-table (eg. returned by the vfs ls static function) or a file_id of that table
* @todo remark/comment from the vfs
* @return array a 'kind' of link-array
*/
static function fileinfo2link($fileinfo,$url=null)
@ -851,7 +857,7 @@ class egw_link extends solink
'id' => $fileinfo['name'],
'app2' => $app,
'id2' => $id,
'remark' => '',
'remark' => '', // only list_attached currently sets the remark
'owner' => $fileinfo['uid'],
'link_id' => -$fileinfo['ino'],
'lastmod' => $fileinfo['mtime'],
@ -873,10 +879,26 @@ class egw_link extends solink
//error_log(__METHOD__."($app,$id) url=$url");
$attached = array();
foreach(egw_vfs::find($url,array('url'=>true,'need_mime'=>true,'type'=>'f'),true) as $url => $fileinfo)
if (($url2stats = egw_vfs::find($url,array('url'=>true,'need_mime'=>true,'type'=>'f'),true)))
{
$props = egw_vfs::propfind(array_keys($url2stats)); // get the comments
foreach($url2stats as $url => &$fileinfo)
{
$link = self::fileinfo2link($fileinfo,$url);
if (isset($props[$path = parse_url($url,PHP_URL_PATH)]))
{
foreach($props[$path] as $prop)
{
if ($prop['ns'] == egw_vfs::DEFAULT_PROP_NAMESPACE && $prop['name'] == 'comment')
{
$link['remark'] = $prop['val'];
break;
}
}
}
$attached[$link['link_id']] = $link;
$urls[] = $url;
}
}
return $attached;
}

View File

@ -263,6 +263,7 @@ class egw_vfs extends vfs_stream_wrapper
* @param array $options=null the following keys are allowed:
* - type => {d|f} d=dirs, f=files, default both
* - depth => {true|false(default)} put the contents of a dir before the dir itself
* - dirsontop => {true(default)|false} allways return dirs before the files (two distinct blocks)
* - mindepth,maxdepth minimal or maximal depth to be returned
* - name,path => pattern with *,? wildcards, eg. "*.php"
* - name_preg,path_preg => preg regular expresion, eg. "/(vfs|wrapper)/"
@ -288,6 +289,8 @@ class egw_vfs extends vfs_stream_wrapper
$type = $options['type']; // 'd' or 'f'
$dirs_last = $options['depth']; // put content of dirs before the dir itself
// show dirs on top by default, if no recursive listing (allways disabled if $type specified, as unnecessary)
$dirsontop = !$type && (isset($options['dirsontop']) ? (boolean)$options['dirsontop'] : isset($options['maxdepth'])&&$options['maxdepth']>0);
// process some of the options (need to be done only once)
if (isset($options['name']) && !isset($options['name_preg'])) // change from simple *,? wildcards to preg regular expression once
@ -377,6 +380,9 @@ class egw_vfs extends vfs_stream_wrapper
self::_check_add($options,$path,$result);
}
}
// sort code, to place directories before files, if $dirsontop enabled
$dirsfirst = $dirsontop ? '($a[mime]==\''.self::DIR_MIME_TYPE.'\')!==($b[mime]==\''.self::DIR_MIME_TYPE.'\')?'.
'($a[mime]==\''.self::DIR_MIME_TYPE.'\'?-1:1):' : '';
// ordering of the rows
if (isset($options['order']))
{
@ -390,7 +396,7 @@ class egw_vfs extends vfs_stream_wrapper
case 'mode':
case 'ctime':
case 'mtime':
uasort($result,create_function('$a,$b',$c='return '.$sort.'($a[\''.$options['order'].'\']-$b[\''.$options['order'].'\']);'));
uasort($result,create_function('$a,$b',$c='return '.$dirsfirst.$sort.'($a[\''.$options['order'].'\']-$b[\''.$options['order'].'\']);'));
break;
// sort alphanumerical
@ -399,8 +405,7 @@ class egw_vfs extends vfs_stream_wrapper
// fall throught
case 'name':
case 'mime':
case 'comment': // ToDo: fetch it for sqlfs or oldvfs
uasort($result,create_function('$a,$b',$c='return '.$sort.'strcasecmp($a[\''.$options['order'].'\'],$b[\''.$options['order'].'\']);'));
uasort($result,create_function('$a,$b',$c='return '.$dirsfirst.$sort.'strcasecmp($a[\''.$options['order'].'\'],$b[\''.$options['order'].'\']);'));
break;
}
//echo "order='$options[order]', sort='$options[sort]' --> '$c'<br>\n";
@ -874,16 +879,16 @@ class egw_vfs extends vfs_stream_wrapper
$mime_full = strtolower(str_replace ('/','_',$mime_type));
list($mime_part) = explode('_',$mime_full);
if (!($img=$GLOBALS['egw']->common->image('filemanager',$icon='mime'.$size.'_'.$mime_full)) &&
!($img=$GLOBALS['egw']->common->image('filemanager',$icon='mime'.$size.'_'.$mime_part)))
if (!($img=$GLOBALS['egw']->common->image('etemplate',$icon='mime'.$size.'_'.$mime_full)) &&
!($img=$GLOBALS['egw']->common->image('etemplate',$icon='mime'.$size.'_'.$mime_part)))
{
$img = $GLOBALS['egw']->common->image('filemanager',$icon='mime'.$size.'_unknown');
$img = $GLOBALS['egw']->common->image('etemplate',$icon='mime'.$size.'_unknown');
}
if ($et_image)
{
return 'filemanager/'.$icon;
return 'etemplate/'.$icon;
}
return html::image('filemanager',$icon,lang($mime_type));
return html::image('etemplate',$icon,lang($mime_type));
}
/**

View File

@ -873,7 +873,7 @@ class sqlfs_stream_wrapper implements iface_stream_wrapper
return false;
}
$this->opened_dir = array();
$query = 'SELECT fs_id,fs_name,fs_mode,fs_uid,fs_gid,fs_size,fs_mime,fs_created,fs_modified FROM '.self::TABLE.' WHERE fs_dir=?';
$query = 'SELECT fs_id,fs_name,fs_mode,fs_uid,fs_gid,fs_size,fs_mime,fs_created,fs_modified FROM '.self::TABLE." WHERE fs_dir=? ORDER BY fs_mime='httpd/unix-directory' DESC, fs_name ASC";
$stmt = self::$pdo->prepare($query);
$stmt->setFetchMode(PDO::FETCH_ASSOC);
@ -1508,7 +1508,7 @@ class sqlfs_stream_wrapper implements iface_stream_wrapper
*/
static function proppatch($path,array &$props)
{
//error_log(__METHOD__."(".array2string($path).','.array2string($props));
error_log(__METHOD__."(".array2string($path).','.array2string($props));
if (!is_numeric($path))
{
if (!($stat = self::url_stat($path,0)))
@ -1613,7 +1613,7 @@ class sqlfs_stream_wrapper implements iface_stream_wrapper
unset($props[$id]);
}
}
foreach((array)$props as $k => $v) error_log(__METHOD__."($path_ids,$ns) $k => ".array2string($v));
//foreach((array)$props as $k => $v) error_log(__METHOD__."($path_ids,$ns) $k => ".array2string($v));
return $props;
}
}