2004-08-01 20:30:46 +02:00
< ? php
/************************************************************************** \
* -------------------------------------------------------------------------*
* This library is free software ; you can redistribute it and / or modify it *
* under the terms of the GNU Lesser General Public License as published by *
* the Free Software Foundation ; either version 2.1 of the License , *
* or any later version . *
* This library is distributed in the hope that it will be useful , but *
* WITHOUT ANY WARRANTY ; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . *
* See the GNU Lesser General Public License for more details . *
* You should have received a copy of the GNU Lesser General Public License *
* along with this library ; if not , write to the Free Software Foundation , *
* Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA *
\ **************************************************************************/
/* $Id$ */
class uifilemanager
{
var $public_functions = array (
'index' => True ,
'help' => True ,
'view' => True ,
'history' => True ,
'edit' => True ,
'download' => True
);
//keep
var $bo ;
var $t ; //template object
var $dispath ;
var $cwd ;
var $lesspath ;
var $readable_groups ;
var $files_array ;
var $numoffiles ;
var $dispsep ;
var $target ;
var $prefs ; //array
var $groups_applications ;
//originally post_vars
// var $goto;
var $goto_x ;
var $download_x ;
var $todir ;
var $changedir ; // for switching dir.
var $cdtodir ; // for switching dir.
// var $createdir;
var $newfile_or_dir ;
var $newdir_x ;
var $newfile_x ;
var $createfile_var ;
var $delete_x ;
var $renamefiles ;
var $rename_x ;
var $move_to_x ;
// var $copy_to;
var $copy_to_x ;
var $edit_x ;
var $edit_comments_x ;
var $edit_file ;
var $edit_preview_x ;
var $edit_save_x ;
var $edit_save_done_x ;
var $edit_cancel_x ;
var $comment_files ;
var $upload_x ;
var $uploadprocess ;
// this ones must be checked thorougly;
var $fileman = Array ();
//var $fileman;
var $path ;
var $file ; // FIXME WHERE IS THIS FILLED?
var $sortby ;
var $messages = array ();
var $show_upload_boxes ;
var $debug = false ;
var $now ;
function uifilemanager ()
{
// error_reporting(8);
$GLOBALS [ 'phpgw' ] -> browser = CreateObject ( 'phpgwapi.browser' );
$this -> now = date ( 'Y-m-d' );
$this -> bo = CreateObject ( 'filemanager.bofilemanager' );
$this -> t = $GLOBALS [ 'phpgw' ] -> template ;
// here local vars are created from the HTTP vars
@ reset ( $GLOBALS [ 'HTTP_POST_VARS' ]);
while ( list ( $name ,) = @ each ( $GLOBALS [ 'HTTP_POST_VARS' ]))
{
$this -> $name = $GLOBALS [ 'HTTP_POST_VARS' ][ $name ];
}
@ reset ( $GLOBALS [ 'HTTP_GET_VARS' ]);
while ( list ( $name ,) = @ each ( $GLOBALS [ 'HTTP_GET_VARS' ]))
{
$$name = $GLOBALS [ 'HTTP_GET_VARS' ][ $name ];
}
$to_decode = array
(
/*
Decode
'var' when 'avar' == 'value'
or
'var' when 'var' is set
*/
'op' => array ( 'op' => '' ),
'path' => array ( 'path' => '' ),
'file' => array ( 'file' => '' ),
'sortby' => array ( 'sortby' => '' ),
// 'fileman' => array('fileman' => ''),
'messages' => array ( 'messages' => '' ),
// 'help_name' => array('help_name' => ''),
// 'renamefiles' => array('renamefiles' => ''),
'comment_files' => array ( 'comment_files' => '' ),
'show_upload_boxes' => array ( 'show_upload_boxes' => '' )
);
reset ( $to_decode );
while ( list ( $var , $conditions ) = each ( $to_decode ))
{
while ( list ( $condvar , $condvalue ) = each ( $conditions ))
{
if ( isset ( $$condvar ) && ( $condvar == $var || $$condvar == $condvalue ))
{
if ( is_array ( $$var ))
{
$temp = array ();
while ( list ( $varkey , $varvalue ) = each ( $$var ))
{
if ( is_int ( $varkey ))
{
$temp [ $varkey ] = stripslashes ( base64_decode ( urldecode (( $varvalue ))));
}
else
{
$temp [ stripslashes ( base64_decode ( urldecode (( $varkey ))))] = $varvalue ;
}
}
$this -> $var = $temp ;
}
elseif ( isset ( $$var ))
{
$this -> $var = stripslashes ( base64_decode ( urldecode ( $$var )));
}
}
}
}
// get appl. and user prefs
$pref = CreateObject ( 'phpgwapi.preferences' , $this -> bo -> userinfo [ 'username' ]);
$pref -> read_repository ();
// $GLOBALS['phpgw']->hooks->single('add_def_pref', $GLOBALS['appname']);
$pref -> save_repository ( True );
$pref_array = $pref -> read_repository ();
$this -> prefs = $pref_array [ $this -> bo -> appname ]; //FIXME check appname var in _debug_array
//always show name
$this -> prefs [ name ] = 1 ;
if ( $this -> prefs [ 'viewinnewwin' ])
{
$this -> target = '_blank' ;
}
/*
Check for essential directories
admin must be able to disable these tests
*/
// check if basedir exist
$test = $this -> bo -> vfs -> get_real_info ( array ( 'string' => $this -> bo -> basedir , 'relatives' => array ( RELATIVE_NONE ), 'relative' => False ));
if ( $test [ mime_type ] != 'Directory' )
{
die ( 'Base directory does not exist, Ask adminstrator to check the global configuration.' );
}
$test = $this -> bo -> vfs -> get_real_info ( array ( 'string' => $this -> bo -> basedir . $this -> bo -> fakebase , 'relatives' => array ( RELATIVE_NONE ), 'relative' => False ));
if ( $test [ mime_type ] != 'Directory' )
{
$this -> bo -> vfs -> override_acl = 1 ;
$this -> bo -> vfs -> mkdir ( array (
'string' => $this -> bo -> fakebase ,
'relatives' => array ( RELATIVE_NONE )
));
$this -> bo -> vfs -> override_acl = 0 ;
//test one more time
$test = $this -> bo -> vfs -> get_real_info ( array ( 'string' => $this -> bo -> basedir . $this -> bo -> fakebase , 'relatives' => array ( RELATIVE_NONE ), 'relative' => False ));
if ( $test [ mime_type ] != 'Directory' )
{
die ( 'Fake Base directory does not exist and could not be created, please ask the adminstrator to check the global configuration.' );
}
else
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array (
lang ( 'Fake Base Dir did not exist, eGroupWare created a new one.' )
));
}
}
// die($this->bo->homedir);
$test = $this -> bo -> vfs -> get_real_info ( array ( 'string' => $this -> bo -> basedir . $this -> bo -> homedir , 'relatives' => array ( RELATIVE_NONE ), 'relative' => False ));
if ( $test [ mime_type ] != 'Directory' )
{
$this -> bo -> vfs -> override_acl = 1 ;
$this -> bo -> vfs -> mkdir ( array (
'string' => $this -> bo -> homedir ,
'relatives' => array ( RELATIVE_NONE )
));
$this -> bo -> vfs -> override_acl = 0 ;
//test one more time
$test = $this -> bo -> vfs -> get_real_info ( array ( 'string' => $this -> bo -> basedir . $this -> bo -> homedir , 'relatives' => array ( RELATIVE_NONE ), 'relative' => False ));
if ( $test [ mime_type ] != 'Directory' )
{
die ( 'Your Home Dir does not exist and could not be created, please ask the adminstrator to check the global configuration.' );
}
else
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array (
lang ( 'Your Home Dir did not exist, eGroupWare created a new one.' )
));
// FIXME we just created a fresh home dir so we know there nothing in it so we have to remove all existing content
}
}
}
function index ()
{
if ( $noheader || $nofooter || ( $this -> download_x && ( count ( $this -> fileman ) > 0 )))
{
$noheader = True ;
$nofooter = True ;
$noappheader = True ;
$nonavbar = True ;
}
else
{
$GLOBALS [ 'phpgw_info' ][ 'flags' ] = array
(
'currentapp' => 'filemanager' ,
'noheader' => $noheader ,
'nonavbar' => $nonavbar ,
'nofooter' => $nofooter ,
'noappheader' => $noappheader ,
'enable_browser_class' => True
);
$GLOBALS [ 'phpgw' ] -> common -> phpgw_header ();
}
# Page to process users
# Code is fairly hackish at the beginning, but it gets better
# Highly suggest turning wrapping off due to long SQL queries
###
# Some hacks to set and display directory paths correctly
###
/*
if ( $this -> goto || $this -> goto_x )
{
$this -> path = $this -> cdtodir ;
}
*/
// new method for switching to a new dir.
if ( $this -> changedir == 'true' && $this -> cdtodir || $this -> goto_x )
{
$this -> path = $this -> cdtodir ;
}
if ( ! $this -> path )
{
$this -> path = $this -> bo -> vfs -> pwd ();
if ( ! $this -> path || $this -> bo -> vfs -> pwd ( array ( 'full' => False )) == '' )
{
$this -> path = $this -> bo -> homedir ;
}
}
$this -> bo -> vfs -> cd ( array ( 'string' => False , 'relatives' => array ( RELATIVE_NONE ), 'relative' => False ));
$this -> bo -> vfs -> cd ( array ( 'string' => $this -> path , 'relatives' => array ( RELATIVE_NONE ), 'relative' => False ));
$pwd = $this -> bo -> vfs -> pwd ();
if ( ! $this -> cwd = substr ( $this -> path , strlen ( $this -> bo -> homedir ) + 1 ))
{
$this -> cwd = '/' ;
}
else
{
$this -> cwd = substr ( $pwd , strrpos ( $pwd , '/' ) + 1 );
}
$this -> disppath = $this -> path ;
/* This just prevents // in some cases */
if ( $this -> path == '/' )
{
$this -> dispsep = '' ;
}
else
{
$this -> dispsep = '/' ;
}
if ( ! ( $this -> lesspath = substr ( $this -> path , 0 , strrpos ( $this -> path , '/' ))))
{
$this -> lesspath = '/' ;
}
# Get their readable groups to be used throughout the script
$groups = array ();
$groups = $GLOBALS [ 'phpgw' ] -> accounts -> get_list ( 'groups' );
$this -> readable_groups = array ();
while ( list ( $num , $account ) = each ( $groups ))
{
if ( $this -> bo -> vfs -> acl_check ( array ( 'owner_id' => $account [ 'account_id' ], 'operation' => PHPGW_ACL_READ )))
{
$this -> readable_groups [ $account [ 'account_lid' ]] = Array ( 'account_id' => $account [ 'account_id' ], 'account_name' => $account [ 'account_lid' ]);
}
}
$this -> groups_applications = array ();
while ( list ( $num , $group_array ) = each ( $this -> readable_groups ))
{
$group_id = $GLOBALS [ 'phpgw' ] -> accounts -> name2id ( $group_array [ 'account_name' ]);
$applications = CreateObject ( 'phpgwapi.applications' , $group_id );
$this -> groups_applications [ $group_array [ 'account_name' ]] = $applications -> read_account_specific ();
}
# We determine if they're in their home directory or a group's directory,
# and set the VFS working_id appropriately
if (( preg_match ( '+^' . $this -> bo -> fakebase . '\/(.*)(\/|$)+U' , $this -> path , $matches )) && $matches [ 1 ] != $this -> bo -> userinfo [ 'account_lid' ]) //FIXME matches not defined
{
$this -> bo -> vfs -> working_id = $GLOBALS [ 'phpgw' ] -> accounts -> name2id ( $matches [ 1 ]); //FIXME matches not defined
}
else
{
$this -> bo -> vfs -> working_id = $this -> bo -> userinfo [ 'username' ];
}
# FIXME # comment waht happens here
if ( $this -> path != $this -> bo -> homedir && $this -> path != $this -> bo -> fakebase && $this -> path != '/' && ! $this -> bo -> vfs -> acl_check ( array ( 'string' => $this -> path , 'relatives' => array ( RELATIVE_NONE ), 'operation' => PHPGW_ACL_READ )))
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array ( lang ( 'You do not have access to %1' , $this -> path )));
$this -> html_link ( '/index.php' , 'menuaction=filemanager.uifilemanager.index' , 'path=' . $this -> homedir , lang ( 'Go to your home directory' ));
$GLOBALS [ 'phpgw' ] -> common -> phpgw_footer ();
$GLOBALS [ 'phpgw' ] -> common -> phpgw_exit ();
}
$this -> bo -> userinfo [ 'working_id' ] = $this -> bo -> vfs -> working_id ;
$this -> bo -> userinfo [ 'working_lid' ] = $GLOBALS [ 'phpgw' ] -> accounts -> id2name ( $this -> bo -> userinfo [ 'working_id' ]);
# If their home directory doesn't exist, we try to create it
# Same for group directories
// Moved to constructor
/*
if (( $this -> path == $this -> homedir ) && ! $this -> bo -> vfs -> file_exists ( $pim_tmp_arr ))
{
$this -> bo -> vfs -> override_acl = 1 ;
if ( ! $this -> bo -> vfs -> mkdir ( array (
'string' => $this -> bo -> homedir ,
'relatives' => array ( RELATIVE_NONE )
)))
{
$p = $this -> bo -> vfs -> path_parts ( $pim_tmp_arr );
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array (
lang ( 'Could not create directory %1' ,
$this -> bo -> homedir . ' (' . $p -> real_full_path . ')'
)));
}
$this -> bo -> vfs -> override_acl = 0 ;
}
*/
# Verify path is real
if ( $this -> path != $this -> bo -> homedir && $this -> path != '/' && $this -> path != $this -> bo -> fakebase )
{
if ( ! $this -> bo -> vfs -> file_exists ( array (
'string' => $this -> path ,
'relatives' => array ( RELATIVE_NONE )
)))
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array ( lang ( 'Directory %1 does not exist' , $this -> path )));
$this -> html_link ( '/index.php' , 'menuaction=filemanager.uifilemanager.index' , 'path=' . $this -> bo -> homedir , lang ( 'Go to your home directory' ));
$GLOBALS [ 'phpgw' ] -> common -> phpgw_footer ();
$GLOBALS [ 'phpgw' ] -> common -> phpgw_exit ();
}
}
/* Update if they request it, or one out of 20 page loads */
srand (( double ) microtime () * 1000000 );
if ( $update || rand ( 0 , 19 ) == 4 )
{
$this -> bo -> vfs -> update_real ( array (
'string' => $this -> path ,
'relatives' => array ( RELATIVE_NONE )
));
}
# Check available permissions for $this->path, so we can disable unusable operations in user interface
if ( $this -> bo -> vfs -> acl_check ( array (
'string' => $this -> path ,
'relatives' => array ( RELATIVE_NONE ),
'operation' => PHPGW_ACL_ADD
)))
{
$this -> can_add = True ;
}
# Default is to sort by name
if ( ! $this -> sortby )
{
$this -> sortby = 'name' ;
}
if ( $this -> debug )
{
$this -> debug_filemanager ();
}
# main action switch
// FIXME this will become a switch
if ( $this -> newfile_x && $this -> newfile_or_dir ) // create new textfile
{
$this -> createfile ();
}
elseif ( $this -> newfile_or_dir && $this -> newdir_x )
{
$this -> createdir ();
}
elseif ( $this -> uploadprocess )
{
$this -> fileUpload ();
}
elseif ( $this -> upload_x || $this -> show_upload_boxes )
{
$this -> showUploadboxes ();
}
elseif ( $this -> copy_to_x )
{
$this -> copyTo ();
}
elseif ( $this -> move_to_x )
{
$this -> moveTo ();
}
elseif ( $this -> download_x )
{
$this -> download ();
}
elseif ( $this -> renamefiles )
{
$this -> rename ();
}
elseif ( $this -> comment_files )
{
$this -> editComment ();
}
elseif ( $this -> edit_cancel_x )
{
$this -> readFilesInfo ();
$this -> fileListing ();
}
elseif ( $this -> edit_x || $this -> edit_preview_x || $this -> edit_save_x || $this -> edit_save_done_x )
{
$this -> edit ();
}
elseif ( $this -> delete_x )
{
$this -> delete ();
}
else
{
$this -> readFilesInfo ();
$this -> fileListing ();
}
}
function fileListing ()
{
$this -> t -> set_file ( array ( 'filemanager_list_t' => 'filelisting.tpl' ));
$this -> t -> set_block ( 'filemanager_list_t' , 'filemanager_header' , 'filemanager_header' );
$this -> t -> set_block ( 'filemanager_list_t' , 'column' , 'column' );
$this -> t -> set_block ( 'filemanager_list_t' , 'row' , 'row' );
$this -> t -> set_block ( 'filemanager_list_t' , 'filemanager_footer' , 'filemanager_footer' );
$vars [ 'form_action' ] = $this -> encode_href ( '/index.php' , 'menuaction=filemanager.uifilemanager.index' , 'path=' . $this -> path );
if ( $this -> numoffiles || $this -> cwd )
{
while ( list ( $num , $name ) = each ( $this -> prefs ))
{
if ( $name )
{
$columns ++ ;
}
}
$columns ++ ;
$vars [ toolbar0 ] = $this -> toolbar ( 'location' );
$vars [ toolbar1 ] = $this -> toolbar ( 'list_nav' );
if ( count ( $this -> messages ) > 0 )
{
foreach ( $this -> messages as $msg )
{
$messages .= '<p>' . $msg . '</p>' ;
}
}
$vars [ messages ] = $messages ;
$this -> t -> set_var ( $vars );
$this -> t -> pparse ( 'out' , 'filemanager_header' );
###
# Start File Table Column Headers
# Reads values from $file_attributes array and preferences
###
$this -> t -> set_var ( 'actions' , lang ( 'select' ));
reset ( $this -> bo -> file_attributes );
if ( $this -> numoffiles > 0 )
{
while ( list ( $internal , $displayed ) = each ( $this -> bo -> file_attributes ))
{
if ( $this -> prefs [ $internal ])
{
$col_data = '<span><a href="' . $this -> encode_href ( '/index.php' , 'menuaction=filemanager.uifilemanager.index' , 'path=' . $this -> path . '&sortby=' . $internal ) . '">' . $displayed . '</a></span>' ;
$this -> t -> set_var ( 'col_data' , $col_data );
$this -> t -> parse ( 'columns' , 'column' , True );
}
}
$this -> t -> set_var ( 'row_tr_color' , '#dedede' );
//kan dit weg?
$this -> t -> parse ( 'rows' , 'row' );
$this -> t -> pparse ( 'out' , 'row' );
}
else
{
$lang_nofiles = lang ( 'No files in this directory.' );
}
$vars [ lang_no_files ] = $lang_nofiles ;
if ( $this -> prefs [ 'dotdot' ] && $this -> prefs [ 'name' ] && $this -> path != '/' )
{
$this -> t -> set_var ( 'actions' , '' );
$link = $this -> encode_href ( '/index.php' , 'menuaction=filemanager.uifilemanager.index' , 'path=' . $this -> lesspath );
$col_data = '<a href="' . $link . '"><img src="' . $GLOBALS [ 'phpgw' ] -> common -> image ( 'filemanager' , 'mime16up' ) . ' "alt="' . lang ( 'Folder Up' ) . '" /></a>' ;
$col_data .= ' <a href="' . $link . '">..</a>' ;
$this -> t -> set_var ( 'col_data' , $col_data );
$this -> t -> parse ( 'columns' , 'column' );
if ( $this -> prefs [ 'mime_type' ])
{
$col_data = lang ( 'Directory' );
$this -> t -> set_var ( 'col_data' , $col_data );
$this -> t -> parse ( 'columns' , 'column' , True );
}
$this -> t -> set_var ( 'row_tr_color' , $tr_color );
$this -> t -> parse ( 'rows' , 'row' );
$this -> t -> pparse ( 'out' , 'row' );
}
# List all of the files, with their attributes
@ reset ( $this -> files_array );
for ( $i = 0 ; $i != $this -> numoffiles ; $i ++ )
{
$files = $this -> files_array [ $i ];
if ( $this -> rename_x || $this -> edit_comments_x )
{
unset ( $this_selected );
unset ( $renamethis );
unset ( $edit_this_comment );
for ( $j = 0 ; $j != $this -> numoffiles ; $j ++ )
{
if ( $this -> fileman [ $j ] == $files [ 'name' ])
{
$this_selected = 1 ;
break ;
}
}
if ( $this -> rename_x && $this_selected )
{
$renamethis = 1 ;
}
elseif ( $this -> edit_comments_x && $this_selected )
{
$edit_this_comment = 1 ;
}
}
if ( ! $this -> prefs [ 'dotfiles' ] && ereg ( " ^ \ . " , $files [ 'name' ]))
{
continue ;
}
# Checkboxes
if ( ! $this -> rename_x && ! $this -> edit_comments_x && $this -> path != $this -> bo -> fakebase && $this -> path != '/' )
{
$cbox = '<input type="checkbox" name="fileman[' . $i . ']" value="' . $files [ 'name' ] . '">' ;
$this -> t -> set_var ( 'actions' , $cbox );
}
elseif ( $renamethis )
{
$cbox = $this -> html_form_input ( 'hidden' , 'fileman[' . base64_encode ( $files [ 'name' ]) . ']' , $files [ 'name' ], NULL , NULL , 'checked' );
$this -> t -> set_var ( 'actions' , $cbox );
}
else
{
$this -> t -> set_var ( 'actions' , '' );
}
# File name and icon
if ( $renamethis )
{
$col_data = $this -> mime_icon ( $files [ 'mime_type' ]);
$col_data .= '<input type="text" maxlength="255" name="renamefiles[' . $files [ 'name' ] . ']" value="' . $files [ 'name' ] . '">' ;
}
else
{
if ( $files [ 'mime_type' ] == 'Directory' )
{
$link = $this -> encode_href ( '/index.php' , 'menuaction=filemanager.uifilemanager.index' , 'path=' . $this -> path . $this -> dispsep . $files [ 'name' ]);
$icon = $this -> mime_icon ( $files [ 'mime_type' ]);
$col_data = '<a href="' . $link . '">' . $icon . '</a> ' ;
$col_data .= '<a href="' . $link . '">' . $files [ 'name' ] . '</a> ' ;
}
else
{
if ( $this -> prefs [ 'viewonserver' ] && isset ( $this -> bo -> filesdir ) && ! $files [ 'link_directory' ])
{
#FIXME
$clickview = $this -> filesdir . $pwd . '/' . $files [ 'name' ];
if ( $phpwh_debug )
{
echo 'Setting clickview = ' . $clickview . '<br>' . " \n " ;
$this -> html_link ( $clickview , '' , '' , $files [ 'name' ], 0 , 1 , 0 , '' );
}
}
else
{
$icon = $this -> mime_icon ( $files [ 'mime_type' ]);
$link = $this -> encode_href ( '/index.php' , 'menuaction=filemanager.uifilemanager.view' , 'file=' . $files [ 'name' ] . '&path=' . $this -> path );
$col_data = '<a href="' . $link . '" target="' . $this -> target . '">' . $icon . '</a> <a href="' . $link . '" target="' . $this -> target . '">' . $files [ 'name' ] . '</a>' ;
}
}
}
$this -> t -> set_var ( 'col_data' , $col_data );
$this -> t -> parse ( 'columns' , 'column' );
# MIME type
if ( $this -> prefs [ 'mime_type' ])
{
$col_data = $files [ 'mime_type' ];
$this -> t -> set_var ( 'col_data' , $col_data );
$this -> t -> parse ( 'columns' , 'column' , True );
}
# File size
if ( $this -> prefs [ 'size' ])
{
$tmp_arr = array (
'string' => $files [ 'directory' ] . '/' . $files [ 'name' ],
'relatives' => array ( RELATIVE_NONE )
);
2004-08-18 10:57:31 +02:00
if ( $files [ 'mime_type' ] != 'Directory' ) $tmp_arr [ 'checksubdirs' ] = false ;
2004-08-01 20:30:46 +02:00
$size = $this -> bo -> vfs -> get_size ( $tmp_arr );
$col_data = $this -> bo -> borkb ( $size );
$this -> t -> set_var ( 'col_data' , $col_data );
$this -> t -> parse ( 'columns' , 'column' , True );
}
# Date created
if ( $this -> prefs [ 'created' ])
{
$col_data = $files [ 'created' ];
$this -> t -> set_var ( 'col_data' , $col_data );
$this -> t -> parse ( 'columns' , 'column' , True );
}
# Date modified
if ( $this -> prefs [ 'modified' ])
{
if ( $files [ 'modified' ] != '0000-00-00' )
{
$col_data = $files [ 'modified' ];
}
else
{
$col_data = '' ;
}
$this -> t -> set_var ( 'col_data' , $col_data );
$this -> t -> parse ( 'columns' , 'column' , True );
}
# Owner name
if ( $this -> prefs [ 'owner' ])
{
$this -> t -> set_var ( 'col_data' , $GLOBALS [ 'phpgw' ] -> accounts -> id2name ( $files [ 'owner_id' ]));
$this -> t -> parse ( 'columns' , 'column' , True );
}
# Creator name
if ( $this -> prefs [ 'createdby_id' ])
{
$this -> html_table_col_begin ();
if ( $files [ 'createdby_id' ])
{
$col_data = $GLOBALS [ 'phpgw' ] -> accounts -> id2name ( $files [ 'createdby_id' ]);
}
else $col_data = '' ;
$this -> t -> set_var ( 'col_data' , $col_data );
$this -> t -> parse ( 'columns' , 'column' , True );
}
# Modified by name
if ( $this -> prefs [ 'modifiedby_id' ])
{
if ( $files [ 'modifiedby_id' ])
{
$col_data = $GLOBALS [ 'phpgw' ] -> accounts -> id2name ( $files [ 'modifiedby_id' ]);
}
else $col_data = '' ;
$this -> t -> set_var ( 'col_data' , $col_data );
$this -> t -> parse ( 'columns' , 'column' , True );
}
# Application
if ( $this -> prefs [ 'app' ])
{
$col_data = $files [ 'app' ];
$this -> t -> set_var ( 'col_data' , $col_data );
$this -> t -> parse ( 'columns' , 'column' , True );
}
# Comment
if ( $this -> prefs [ 'comment' ])
{
if ( $edit_this_comment )
{
$col_data = '<input type="text" name="comment_files[' . $files [ 'name' ] . ']" value="' . $files [ 'comment' ] . '" maxlength="255">' ;
}
else
{
$col_data = $files [ 'comment' ];
}
$this -> t -> set_var ( 'col_data' , $col_data );
$this -> t -> parse ( 'columns' , 'column' , True );
}
# Version
if ( $this -> prefs [ 'version' ])
{
$link = $this -> encode_href ( '/index.php' , 'menuaction=filemanager.uifilemanager.history' , 'file=' . $files [ 'name' ] . '&path=' . $this -> path );
$col_data = '<a href="' . $link . '" target="_blank">' . $files [ 'version' ] . '</a>' ;
$this -> t -> set_var ( 'col_data' , $col_data );
$this -> t -> parse ( 'columns' , 'column' , True );
}
if ( $files [ 'mime_type' ] == 'Directory' )
{
$usedspace += $fileinfo [ 0 ];
}
else
{
$usedspace += $files [ 'size' ];
}
$this -> t -> set_var ( 'row_tr_color' , '' );
$this -> t -> parse ( 'rows' , 'row' );
$this -> t -> pparse ( 'out' , 'row' );
}
// when renaming or changing comments render extra sumbmit button
if ( $this -> rename_x || $this -> edit_comments_x )
{
$col_data = '<br/><input type="submit" name="save_changes" value="' . lang ( 'Save changes' ) . '">' ;
$this -> t -> set_var ( 'col_data' , $col_data );
$this -> t -> parse ( 'columns' , 'column' );
$this -> t -> set_var ( 'row_tr_color' , '' );
$this -> t -> parse ( 'rows' , 'row' );
$this -> t -> pparse ( 'out' , 'row' );
}
}
// The file and directory information
$vars [ lang_files_in_this_dir ] = lang ( 'Files in this directory' );
$vars [ files_in_this_dir ] = $this -> numoffiles ;
$vars [ lang_used_space ] = lang ( 'Used space' );
$vars [ used_space ] = $this -> bo -> borkb ( $usedspace , NULL , 1 );
if ( $this -> path == $this -> bo -> homedir || $this -> path == $this -> bo -> fakebase )
{
$vars [ lang_unused_space ] = lang ( 'Unused space' );
$vars [ unused_space ] = $this -> bo -> borkb ( $this -> bo -> userinfo [ 'hdspace' ] - $usedspace , NULL , 1 );
$tmp_arr = array (
'string' => $this -> path ,
'relatives' => array ( RELATIVE_NONE )
);
$ls_array = $this -> bo -> vfs -> ls ( $tmp_arr );
$vars [ lang_total_files ] = lang ( 'Total Files' );
$vars [ total_files ] = count ( $ls_array );
}
$this -> t -> set_var ( $vars );
$this -> t -> pparse ( 'out' , 'filemanager_footer' );
$GLOBALS [ 'phpgw' ] -> common -> phpgw_footer ();
$GLOBALS [ 'phpgw' ] -> common -> phpgw_exit ();
}
function readFilesInfo ()
{
// start files info
# Read in file info from database to use in the rest of the script
# $fakebase is a special directory. In that directory, we list the user's
# home directory and the directories for the groups they're in
$this -> numoffiles = 0 ;
if ( $this -> path == $this -> bo -> fakebase )
{
// FIXME this test can be removed
if ( ! $this -> bo -> vfs -> file_exists ( array ( 'string' => $this -> bo -> homedir , 'relatives' => array ( RELATIVE_NONE ))))
{
$this -> bo -> vfs -> mkdir ( array ( 'string' => $this -> bo -> homedir , 'relatives' => array ( RELATIVE_NONE )));
}
$ls_array = $this -> bo -> vfs -> ls ( array (
'string' => $this -> bo -> homedir ,
'relatives' => array ( RELATIVE_NONE ),
'checksubdirs' => False ,
'nofiles' => True
));
$this -> files_array [] = $ls_array [ 0 ];
$this -> numoffiles ++ ;
reset ( $this -> readable_groups );
while ( list ( $num , $group_array ) = each ( $this -> readable_groups ))
{
# If the group doesn't have access to this app, we don't show it
if ( ! $this -> groups_applications [ $group_array [ 'account_name' ]][ $this -> bo -> appname ][ 'enabled' ])
{
continue ;
}
if ( ! $this -> bo -> vfs -> file_exists ( array ( 'string' => $this -> bo -> fakebase . '/' . $group_array [ 'account_name' ], 'relatives' => array ( RELATIVE_NONE ))))
{
$this -> bo -> vfs -> override_acl = 1 ;
$this -> bo -> vfs -> mkdir ( array (
'string' => $this -> bo -> fakebase . '/' . $group_array [ 'account_name' ],
'relatives' => array ( RELATIVE_NONE )
));
// FIXME we just created a fresh group dir so we know there nothing in it so we have to remove all existing content
$this -> bo -> vfs -> override_acl = 0 ;
$this -> bo -> vfs -> set_attributes ( array ( 'string' => $this -> bo -> fakebase . '/' . $group_array [ 'account_name' ], 'relatives' => array ( RELATIVE_NONE ), 'attributes' => array ( 'owner_id' => $group_array [ 'account_id' ], 'createdby_id' => $group_array [ 'account_id' ])));
}
$ls_array = $this -> bo -> vfs -> ls ( array ( 'string' => $this -> bo -> fakebase . '/' . $group_array [ 'account_name' ], 'relatives' => array ( RELATIVE_NONE ), 'checksubdirs' => False , 'nofiles' => True ));
$this -> files_array [] = $ls_array [ 0 ];
$this -> numoffiles ++ ;
}
}
else
{
$ls_array = $this -> bo -> vfs -> ls ( array (
'string' => $this -> path ,
'relatives' => array ( RELATIVE_NONE ),
'checksubdirs' => False ,
'nofiles' => False ,
'orderby' => $this -> sortby
));
if ( $phpwh_debug )
{
echo '# of files found in "' . $this -> path . '" : ' . count ( $ls_array ) . '<br>' . " \n " ;
}
while ( list ( $num , $file_array ) = each ( $ls_array ))
{
$this -> numoffiles ++ ;
$this -> files_array [] = $file_array ;
if ( $phpwh_debug )
{
echo 'Filename: ' . $file_array [ 'name' ] . '<br>' . " \n " ;
}
}
}
if ( ! is_array ( $this -> files_array ))
{
$this -> files_array = array ();
}
// end file count
}
function toolbar ( $type )
{
switch ( $type )
{
case 'location' :
$toolbar = '
< div id = " fmLocation " >
< table cellspacing = " 1 " cellpadding = " 0 " border = " 0 " >
< tr >
' ;
$toolbar .= '<td><img alt="spacer" src="' . $GLOBALS [ 'phpgw' ] -> common -> image ( 'phpgwapi' , 'buttonseparator' ) . '" height="27" width="8"></td>' ;
$toolbar .= '
< td >< img alt = " spacer " src = " '. $GLOBALS['phpgw'] ->common->image('filemanager','spacer').' " height = " 27 " width = " 1 " ></ td > ' ;
// go up icon when we're not at the top, dont allow to go outside /home = fakebase
if ( $this -> path != '/' && $this -> path != $this -> bo -> fakebase )
{
$link = $this -> encode_href ( '/index.php' , 'menuaction=filemanager.uifilemanager.index' , 'path=' . $this -> lesspath );
$toolbar .= $this -> buttonImage ( $link , 'up' , lang ( 'go up' ));
}
// go home icon when we're not home already
if ( $this -> path != $this -> bo -> homedir )
{
$link = $this -> encode_href ( '/index.php' , 'menuaction=filemanager.uifilemanager.index' , 'path=' . $this -> bo -> homedir );
$toolbar .= $this -> buttonImage ( $link , 'home' , lang ( 'go home' ));
}
// reload button with this url
$link = $this -> encode_href ( '/index.php' , 'menuaction=filemanager.uifilemanager.index' , 'path=' . $this -> path );
$toolbar .= $this -> buttonImage ( $link , 'reload' , lang ( 'reload' ));
$toolbar .= '<td>' . lang ( 'Location' ) . ': ' ;
//$toolbar.='<input id="fmInputLocation" type="text" size="20" disabled="disabled" name="location" value="'.$this->disppath.'"/> ';
$current_option = '<option>' . $this -> disppath . '</option>' ;
// selectbox for change/move/and copy to
$dirs_options = $this -> all_other_directories_options ();
$toolbar .= '<select name="cdtodir" onChange="document.formfm.changedir.value=\'true\';document.formfm.submit()">' . $current_option . $dirs_options . ' </ select >
< input type = " hidden " name = " changedir " value = " false " ></ td >
' ;
$toolbar .= $this -> inputImage ( 'goto' , 'goto' , lang ( 'Quick jump to' ));
// upload button
if ( $this -> path != '/' && $this -> path != $this -> bo -> fakebase && $this -> can_add )
{
$toolbar .= '<td><img alt="spacer" src="' . $GLOBALS [ 'phpgw' ] -> common -> image ( 'filemanager' , 'spacer' ) . '" height="27" width="1"></td>' ;
$toolbar .= '<td><img alt="spacer" src="' . $GLOBALS [ 'phpgw' ] -> common -> image ( 'phpgwapi' , 'buttonseparator' ) . '" height="27" width="8"></td>' ;
$toolbar .= '<td><img alt="spacer" src="' . $GLOBALS [ 'phpgw' ] -> common -> image ( 'filemanager' , 'spacer' ) . '" height="27" width="1"></td>' ;
// $toolbar.=$this->inputImage('download','download',lang('Download'));
// upload button
$toolbar .= $this -> inputImage ( 'upload' , 'upload' , lang ( 'Upload' ));
}
$toolbar .= '</tr></table>' ;
$toolbar .= '</div>' ;
break ;
case 'list_nav' :
$toolbar = '
< table cellspacing = " 1 " cellpadding = " 0 " border = " 0 " >
< tr > ' ;
// selectbox for change/move/and copy to
// submit buttons for
if ( $this -> path != '/' && $this -> path != $this -> bo -> fakebase )
{
$toolbar .= '<td><img alt="spacer" src="' . $GLOBALS [ 'phpgw' ] -> common -> image ( 'phpgwapi' , 'buttonseparator' ) . '" height="27" width="8"></td>' ;
$toolbar .= '
< td >< img alt = " spacer " src = " '. $GLOBALS['phpgw'] ->common->image('filemanager','spacer').' " height = " 27 " width = " 1 " ></ td > ' ;
if ( ! $this -> rename_x && ! $this -> edit_comments_x )
{
// edit text file button
$toolbar .= $this -> inputImage ( 'edit' , 'edit' , lang ( 'edit' ));
}
if ( ! $this -> edit_comments_x )
{
$toolbar .= $this -> inputImage ( 'rename' , 'rename' , lang ( 'Rename' ));
}
if ( ! $this -> rename_x && ! $this -> edit_comments_x )
{
$toolbar .= $this -> inputImage ( 'delete' , 'delete' , lang ( 'Delete' ));
}
if ( ! $this -> rename_x )
{
$toolbar .= $this -> inputImage ( 'edit_comments' , 'edit_comments' , lang ( 'Edit comments' ));
}
$toolbar .= '<td><img alt="spacer" src="' . $GLOBALS [ 'phpgw' ] -> common -> image ( 'filemanager' , 'spacer' ) . '" height="27" width="1"></td>' ;
}
// $toolbar.='</tr></table>';
if ( ! $this -> rename_x && ! $this -> edit_comments_x )
{
// copy and move buttons
if ( $this -> path != '/' && $this -> path != $this -> bo -> fakebase )
{
$toolbar3 .= '<td><img alt="spacer" src="' . $GLOBALS [ 'phpgw' ] -> common -> image ( 'phpgwapi' , 'buttonseparator' ) . '" height="27" width="8"></td>' ;
$toolbar3 .= '<td><img alt="spacer" src="' . $GLOBALS [ 'phpgw' ] -> common -> image ( 'filemanager' , 'spacer' ) . '" height="27" width="1"></td>' ;
$dirs_options = $this -> all_other_directories_options ();
$toolbar3 .= '<td><select name="todir">' . $dirs_options . '</select></td>' ;
$toolbar3 .= $this -> inputImage ( 'copy_to' , 'copy_to' , lang ( 'Copy to' ));
$toolbar3 .= $this -> inputImage ( 'move_to' , 'move_to' , lang ( 'Move to' ));
$toolbar3 .= '<td><img alt="spacer" src="' . $GLOBALS [ 'phpgw' ] -> common -> image ( 'filemanager' , 'spacer' ) . '" height="27" width="1"></td>' ;
}
// create dir and file button
if ( $this -> path != '/' && $this -> path != $this -> bo -> fakebase && $this -> can_add )
{
$toolbar3 .= '<td><img alt="spacer" src="' . $GLOBALS [ 'phpgw' ] -> common -> image ( 'phpgwapi' , 'buttonseparator' ) . '" height="27" width="8"></td>' ;
$toolbar3 .= '<td><img alt="spacer" src="' . $GLOBALS [ 'phpgw' ] -> common -> image ( 'filemanager' , 'spacer' ) . '" height="27" width="1"></td>' ;
$toolbar3 .= '<td><input type=text size="15" name="newfile_or_dir" value="" /></td>' ;
$toolbar3 .= $this -> inputImage ( 'newdir' , 'createdir' , lang ( 'Create Folder' ));
$toolbar3 .= $this -> inputImage ( 'newfile' , 'createfile' , lang ( 'Create File' ));
}
if ( $toolbar3 )
{
$toolbar .= $toolbar3 ;
/* $toolbar .= '
< table cellspacing = " 1 " cellpadding = " 0 " border = " 0 " >
< tr > ' . $toolbar3 ; */
}
}
$toolbar .= '</tr></table>' ;
break ;
default : $x = '' ;
}
if ( $toolbar )
{
return $toolbar ;
}
}
// move to bo
# Handle File Uploads
function fileUpload ()
{
if ( $this -> path != '/' && $this -> path != $this -> bo -> fakebase )
{
for ( $i = 0 ; $i != $this -> show_upload_boxes ; $i ++ )
{
if ( $badchar = $this -> bo -> bad_chars ( $_FILES [ 'upload_file' ][ 'name' ][ $i ], True , True ))
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array ( $this -> bo -> html_encode ( lang ( 'File names cannot contain "%1"' , $badchar ), 1 )));
continue ;
}
# Check to see if the file exists in the database, and get its info at the same time
$ls_array = $this -> bo -> vfs -> ls ( array (
'string' => $this -> path . '/' . $_FILES [ 'upload_file' ][ 'name' ][ $i ],
'relatives' => array ( RELATIVE_NONE ),
'checksubdirs' => False ,
'nofiles' => True
));
$fileinfo = $ls_array [ 0 ];
if ( $fileinfo [ 'name' ])
{
if ( $fileinfo [ 'mime_type' ] == 'Directory' )
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array ( lang ( 'Cannot replace %1 because it is a directory' , $fileinfo [ 'name' ])));
continue ;
}
}
if ( $_FILES [ 'upload_file' ][ 'size' ][ $i ] > 0 )
{
if ( $fileinfo [ 'name' ] && $fileinfo [ 'deleteable' ] != 'N' )
{
$tmp_arr = array (
'string' => $_FILES [ 'upload_file' ][ 'name' ][ $i ],
'relatives' => array ( RELATIVE_ALL ),
'attributes' => array (
'owner_id' => $this -> bo -> userinfo [ 'username' ],
'modifiedby_id' => $this -> bo -> userinfo [ 'username' ],
'modified' => $this -> now ,
'size' => $_FILES [ 'upload_file' ][ 'size' ][ $i ],
'mime_type' => $_FILES [ 'upload_file' ][ 'type' ][ $i ],
'deleteable' => 'Y' ,
'comment' => stripslashes ( $_POST [ 'upload_comment' ][ $i ])
)
);
$this -> bo -> vfs -> set_attributes ( $tmp_arr );
$tmp_arr = array (
'from' => $_FILES [ 'upload_file' ][ 'tmp_name' ][ $i ],
'to' => $_FILES [ 'upload_file' ][ 'name' ][ $i ],
'relatives' => array ( RELATIVE_NONE | VFS_REAL , RELATIVE_ALL )
);
$this -> bo -> vfs -> cp ( $tmp_arr );
$this -> messages [] = lang ( 'Replaced %1' , $this -> disppath . '/' . $_FILES [ 'upload_file' ][ 'name' ][ $i ]);
}
else
{
$this -> bo -> vfs -> cp ( array (
'from' => $_FILES [ 'upload_file' ][ 'tmp_name' ][ $i ],
'to' => $_FILES [ 'upload_file' ][ 'name' ][ $i ],
'relatives' => array ( RELATIVE_NONE | VFS_REAL , RELATIVE_ALL )
));
$this -> bo -> vfs -> set_attributes ( array (
'string' => $_FILES [ 'upload_file' ][ 'name' ][ $i ],
'relatives' => array ( RELATIVE_ALL ),
'attributes' => array (
'mime_type' => $_FILES [ 'upload_file' ][ 'type' ][ $i ],
'comment' => stripslashes ( $_POST [ 'upload_comment' ][ $i ])
)
));
$this -> messages [] = lang ( 'Created %1,%2' , $this -> disppath . '/' . $_FILES [ 'upload_file' ][ 'name' ][ $i ], $_FILES [ 'upload_file' ][ 'size' ][ $i ]);
}
}
elseif ( $_FILES [ 'upload_file' ][ 'name' ][ $i ])
{
$this -> bo -> vfs -> touch ( array (
'string' => $_FILES [ 'upload_file' ][ 'name' ][ $i ],
'relatives' => array ( RELATIVE_ALL )
));
$this -> bo -> vfs -> set_attributes ( array (
'string' => $_FILES [ 'upload_file' ][ 'name' ][ $i ],
'relatives' => array ( RELATIVE_ALL ),
'attributes' => array (
'mime_type' => $_FILES [ 'upload_file' ][ 'type' ][ $i ],
'comment' => stripslashes ( $_POST [ 'upload_comment' ][ $i ])
)
));
$this -> messages [] = lang ( 'Created %1,%2' , $this -> disppath . '/' . $_FILES [ 'upload_file' ][ 'name' ][ $i ], $file_size [ $i ]);
}
}
$this -> readFilesInfo ();
$this -> filelisting ();
}
}
# Handle Editing comments
function editComment ()
{
while ( list ( $file ) = each ( $this -> comment_files ))
{
if ( $badchar = $this -> bo -> bad_chars ( $this -> comment_files [ $file ], False , True ))
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array ( $file . $this -> bo -> html_encode ( ': ' . lang ( 'Comments cannot contain "%1"' , $badchar ), 1 )));
continue ;
}
$this -> bo -> vfs -> set_attributes ( array (
'string' => $file ,
'relatives' => array ( RELATIVE_ALL ),
'attributes' => array (
'comment' => stripslashes ( $this -> comment_files [ $file ])
)
));
$this -> messages [] = lang ( 'Updated comment for %1' , $this -> path . '/' . $file );
}
$this -> readFilesInfo ();
$this -> filelisting ();
}
# Handle Renaming Files and Directories
function rename ()
{
while ( list ( $from , $to ) = each ( $this -> renamefiles ))
{
if ( $badchar = $this -> bo -> bad_chars ( $to , True , True ))
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array ( $this -> bo -> html_encode ( lang ( 'File names cannot contain "%1"' , $badchar ), 1 )));
continue ;
}
if ( ereg ( " / " , $to ) || ereg ( " \\ \\ " , $to ))
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array ( lang ( " File names cannot contain \\ or / " )));
}
elseif ( ! $this -> bo -> vfs -> mv ( array (
'from' => $from ,
'to' => $to
)))
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array ( lang ( 'Could not rename %1 to %2' , $this -> disppath . '/' . $from , $this -> disppath . '/' . $to )));
}
else
{
$this -> messages [] = lang ( 'Renamed %1 to %2' , $this -> disppath . '/' . $from , $this -> disppath . '/' . $to );
}
}
$this -> readFilesInfo ();
$this -> filelisting ();
}
# Handle Moving Files and Directories
function moveTo ()
{
if ( ! $this -> todir )
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array ( lang ( 'Could not move file because no destination directory is given ' , $this -> disppath . '/' . $file )));
}
else
{
while ( list ( $num , $file ) = each ( $this -> fileman ))
{
if ( $this -> bo -> vfs -> mv ( array (
'from' => $file ,
'to' => $this -> todir . '/' . $file ,
'relatives' => array ( RELATIVE_ALL , RELATIVE_NONE )
)))
{
$moved ++ ;
$this -> messages [] = lang ( 'Moved %1 to %2' , $this -> disppath . '/' . $file , $this -> todir . '/' . $file );
}
else
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array ( lang ( 'Could not move %1 to %2' , $this -> disppath . '/' . $file , $this -> todir . '/' . $file )));
}
}
}
if ( $moved )
{
$x = 0 ;
}
$this -> readFilesInfo ();
$this -> filelisting ();
}
// Handle Copying of Files and Directories
function copyTo ()
{
if ( ! $this -> todir )
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array ( lang ( 'Could not copy file because no destination directory is given ' , $this -> disppath . '/' . $file )));
}
else
{
while ( list ( $num , $file ) = each ( $this -> fileman ))
{
if ( $this -> bo -> vfs -> cp ( array (
'from' => $file ,
'to' => $this -> todir . '/' . $file ,
'relatives' => array ( RELATIVE_ALL , RELATIVE_NONE )
)))
{
$copied ++ ;
$this -> message .= lang ( 'Copied %1 to %2' , $this -> disppath . '/' . $file , $this -> todir . '/' . $file );
}
else
{
$this -> message .= $GLOBALS [ 'phpgw' ] -> common -> error_list ( array ( lang ( 'Could not copy %1 to %2' , $this -> disppath . '/' . $file , $this -> todir . '/' . $file )));
}
}
}
if ( $copied )
{
$x = 0 ;
}
$this -> readFilesInfo ();
$this -> filelisting ();
}
function createdir ()
{
if ( $this -> newdir_x && $this -> newfile_or_dir )
{
if ( $this -> bo -> badchar = $this -> bo -> bad_chars ( $this -> newfile_or_dir , True , True ))
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array ( $this -> bo -> html_encode ( lang ( 'Directory names cannot contain "%1"' , $badchar ), 1 )));
}
/* TODO is this right or should it be a single $ ? */
if ( $$this -> newfile_or_dir [ strlen ( $this -> newfile_or_dir ) - 1 ] == ' ' || $this -> newfile_or_dir [ 0 ] == ' ' )
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array ( lang ( 'Cannot create directory because it begins or ends in a space' )));
}
$ls_array = $this -> bo -> vfs -> ls ( array (
'string' => $this -> path . '/' . $this -> newfile_or_dir ,
'relatives' => array ( RELATIVE_NONE ),
'checksubdirs' => False ,
'nofiles' => True
));
$fileinfo = $ls_array [ 0 ];
if ( $fileinfo [ 'name' ])
{
if ( $fileinfo [ 'mime_type' ] != 'Directory' )
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array (
lang ( '%1 already exists as a file' ,
$fileinfo [ 'name' ])
));
}
else
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array ( lang ( 'Directory %1 already exists' , $fileinfo [ 'name' ])));
}
}
else
{
if ( $this -> bo -> vfs -> mkdir ( array ( 'string' => $this -> newfile_or_dir )))
{
$this -> messages [] = lang ( 'Created directory %1' , $this -> disppath . '/' . $this -> newfile_or_dir );
}
else
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array ( lang ( 'Could not create %1' , $this -> disppath . '/' . $this -> newfile_or_dir )));
}
}
$this -> readFilesInfo ();
$this -> filelisting ();
}
}
function delete ()
{
if ( is_array ( $this -> fileman ) && count ( $this -> fileman ) >= 1 )
{
foreach ( $this -> fileman as $filename )
{
if ( $this -> bo -> vfs -> delete ( array ( 'string' => $filename )))
{
$this -> messages [] = lang ( 'Deleted %1' , $this -> disppath . '/' . $filename ) . '<br/>' ;
}
else
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array ( lang ( 'Could not delete %1' , $this -> disppath . '/' . $filename )));
}
}
}
else
{
// make this a javascript func for quicker respons
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array ( lang ( 'Please select a file to delete.' )));
}
$this -> readFilesInfo ();
$this -> filelisting ();
}
function debug_filemanager ()
{
error_reporting ( 8 );
echo " <b>Filemanager debug:</b><br>
path : { $this -> path } < br >
disppath : { $this -> disppath } < br >
cwd : { $this -> cwd } < br >
lesspath : { $this -> lesspath }
< p >
< b > eGroupware debug :</ b >< br >
real getabsolutepath : " . $this->bo ->vfs->getabsolutepath(array('target' => False, 'mask' => False, 'fake' => False)) . " < br >
fake getabsolutepath : " . $this->bo ->vfs->getabsolutepath(array('target' => False)) . " < br >
appsession : " . $GLOBALS['phpgw'] ->session->appsession('vfs','') . " < br >
pwd : " . $this->bo ->vfs->pwd() . " < br > " ;
echo '<p></p>' ;
var_dump ( $this );
}
function showUploadboxes ()
{
$this -> t -> set_file ( array ( 'upload' => 'upload.tpl' ));
$this -> t -> set_block ( 'upload' , 'upload_header' , 'upload_header' );
$this -> t -> set_block ( 'upload' , 'row' , 'row' );
$this -> t -> set_block ( 'upload' , 'upload_footer' , 'upload_footer' );
# Decide how many upload boxes to show
if ( ! $this -> show_upload_boxes || $this -> show_upload_boxes <= 0 )
{
if ( ! $this -> show_upload_boxes = $this -> prefs [ 'show_upload_boxes' ])
{
$this -> show_upload_boxes = 1 ;
}
}
# Show file upload boxes. Note the last argument to html(). Repeats $this->show_upload_boxes times
if ( $this -> path != '/' && $this -> path != $this -> bo -> fakebase && $this -> can_add )
{
$vars [ form_action ] = $GLOBALS [ phpgw ] -> link ( '/index.php' , 'menuaction=filemanager.uifilemanager.index' );
$vars [ path ] = $this -> path ;
$vars [ lang_file ] = lang ( 'File' );
$vars [ lang_comment ] = lang ( 'Comment' );
$vars [ num_upload_boxes ] = $this -> show_upload_boxes ;
$this -> t -> set_var ( $vars );
$this -> t -> pparse ( 'out' , 'upload_header' );
for ( $i = 0 ; $i < $this -> show_upload_boxes ; $i ++ )
{
$this -> t -> set_var ( 'row_tr_color' , $tr_color );
$this -> t -> parse ( 'rows' , 'row' );
$this -> t -> pparse ( 'out' , 'row' );
}
$vars [ lang_upload ] = lang ( 'Upload files' );
$vars [ change_upload_boxes ] .= lang ( 'Show' ) . ' ' ;
$links .= $this -> html_link ( '/index.php' , 'menuaction=filemanager.uifilemanager.index' , 'show_upload_boxes=5' , '5' );
$links .= ' ' ;
$links .= $this -> html_link ( '/index.php' , 'menuaction=filemanager.uifilemanager.index' , 'show_upload_boxes=10' , '10' );
$links .= ' ' ;
$links .= $this -> html_link ( '/index.php' , 'menuaction=filemanager.uifilemanager.index' , 'show_upload_boxes=20' , '20' );
$links .= ' ' ;
$links .= $this -> html_link ( '/index.php' , 'menuaction=filemanager.uifilemanager.index' , 'show_upload_boxes=50' , '50' );
$links .= ' ' ;
$links .= lang ( 'upload fields' );
$vars [ change_upload_boxes ] .= $links ;
$this -> t -> set_var ( $vars );
$this -> t -> pparse ( 'out' , 'upload_footer' );
}
}
/* create textfile */
function createfile ()
{
$this -> createfile_var = $this -> newfile_or_dir ;
if ( $this -> createfile_var )
{
if ( $badchar = $this -> bo -> bad_chars ( $this -> createfile_var , True , True ))
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array (
lang ( 'File names cannot contain "%1"' , $badchar ),
1 )
);
$this -> fileListing ();
}
if ( $this -> bo -> vfs -> file_exists ( array (
'string' => $this -> createfile_var ,
'relatives' => array ( RELATIVE_ALL )
)))
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array ( lang ( 'File %1 already exists. Please edit it or delete it first.' , $this -> createfile_var )));
$this -> fileListing ();
}
if ( $this -> bo -> vfs -> touch ( array (
'string' => $this -> createfile_var ,
'relatives' => array ( RELATIVE_ALL )
)))
{
$this -> fileman = array ();
$this -> fileman [ 0 ] = $this -> createfile_var ;
$this -> edit = 1 ;
$this -> numoffiles ++ ;
$this -> edit ();
}
else
{
$this -> messages [] = $GLOBALS [ 'phpgw' ] -> common -> error_list ( array ( lang ( 'File %1 could not be created.' , $this -> createfile_var )));
$this -> fileListing ();
}
}
}
# Handle Editing files
function edit ()
{
$this -> readFilesInfo ();
$this -> t -> set_file ( array ( 'filemanager_edit' => 'edit_file.tpl' ));
$this -> t -> set_block ( 'filemanager_edit' , 'row' , 'row' );
$vars [ preview_content ] = '' ;
if ( $this -> edit_file )
{
$this -> edit_file_content = stripslashes ( $this -> edit_file_content );
}
if ( $this -> edit_preview_x )
{
$content = $this -> edit_file_content ;
$vars [ lang_preview_of ] = lang ( 'Preview of %1' , $this -> path . '/' . $edit_file );
$vars [ preview_content ] = nl2br ( $content );
}
elseif ( $this -> edit_save_x || $this -> edit_save_done_x )
{
$content = $this -> edit_file_content ;
//die( $content);
if ( $this -> bo -> vfs -> write ( array (
'string' => $this -> edit_file ,
'relatives' => array ( RELATIVE_ALL ),
'content' => $content
)))
{
$this -> messages [] = lang ( 'Saved %1' , $this -> path . '/' . $this -> edit_file );
if ( $this -> edit_save_done_x )
{
$this -> readFilesInfo ();
$this -> fileListing ();
exit ;
}
}
else
{
$this -> messages [] = lang ( 'Could not save %1' , $this -> path . '/' . $this -> edit_file );
}
}
# Now we display the edit boxes and forms
for ( $j = 0 ; $j != $this -> numoffiles ; $j ++ )
{
# If we're in preview or save mode, we only show the file
# being previewed or saved
if ( $this -> edit_file && ( $this -> fileman [ $j ] != $this -> edit_file ))
{
continue ;
}
if ( $this -> fileman [ $j ] && $this -> bo -> vfs -> file_exists ( array (
'string' => $this -> fileman [ $j ],
'relatives' => array ( RELATIVE_ALL )
)))
{
if ( $this -> edit_file )
{
$content = stripslashes ( $this -> edit_file_content );
}
else
{
$content = $this -> bo -> vfs -> read ( array ( 'string' => $this -> fileman [ $j ]));
}
$vars [ form_action ] = $GLOBALS [ 'phpgw' ] -> link ( '/index.php' , 'menuaction=filemanager.uifilemanager.index' , 'path=' . $this -> path );
$vars [ edit_file ] = $this -> fileman [ $j ];
# We need to include all of the fileman entries for each file's form,
# so we loop through again
for ( $i = 0 ; $i != $this -> numoffiles ; $i ++ )
{
if ( $this -> fileman [ $i ]) $value = 'value="' . $this -> fileman [ $i ] . '"' ;
$vars [ filemans_hidden ] = '<input type="hidden" name="fileman[' . $i . ']" ' . $value . ' />' ;
}
$vars [ file_content ] = $content ;
$vars [ buttonPreview ] = $this -> inputImage ( 'edit_preview' , 'edit_preview' , lang ( 'Preview %1' , $this -> bo -> html_encode ( $this -> fileman [ $j ], 1 )));
$vars [ buttonSave ] = $this -> inputImage ( 'edit_save' , 'save' , lang ( 'Save %1' , $this -> bo -> html_encode ( $this -> fileman [ $j ], 1 )));
$vars [ buttonDone ] = $this -> inputImage ( 'edit_save_done' , 'ok' , lang ( 'Save %1, and go back to file listing ' , $this -> bo -> html_encode ( $this -> fileman [ $j ], 1 )));
$vars [ buttonCancel ] = $this -> inputImage ( 'edit_cancel' , 'cancel' , lang ( 'Cancel editing %1 without saving' , $this -> bo -> html_encode ( $this -> fileman [ $j ], 1 )));
$this -> t -> set_var ( $vars );
$this -> t -> parse ( 'rows' , 'row' );
$this -> t -> pparse ( 'out' , 'row' );
}
}
}
function history ()
{
if ( $this -> file ) // FIXME this-file is never defined
{
$journal_array = $this -> bo -> vfs -> get_journal ( array (
'string' => $this -> file , //FIXME
'relatives' => array ( RELATIVE_ALL )
));
if ( is_array ( $journal_array ))
{
$this -> html_table_begin ();
$this -> html_table_row_begin ();
$this -> html_table_col_begin ();
echo lang ( 'Date' );
$this -> html_table_col_end ();
$this -> html_table_col_begin ();
echo lang ( 'Version' );
$this -> html_table_col_end ();
$this -> html_table_col_begin ();
echo lang ( 'Who' );
$this -> html_table_col_end ();
$this -> html_table_col_begin ();
echo lang ( 'Operation' );
$this -> html_table_col_end ();
$this -> html_table_row_end ();
while ( list ( $num , $journal_entry ) = each ( $journal_array ))
{
$this -> html_table_row_begin ();
$this -> html_table_col_begin ();
$this -> bo -> html_text ( $journal_entry [ 'created' ] . ' ' );
$this -> html_table_col_end ();
$this -> html_table_col_begin ();
$this -> bo -> html_text ( $journal_entry [ 'version' ] . ' ' );
$this -> html_table_col_end ();
$this -> html_table_col_begin ();
$this -> bo -> html_text ( $GLOBALS [ 'phpgw' ] -> accounts -> id2name ( $journal_entry [ 'owner_id' ]) . ' ' );
$this -> html_table_col_end ();
$this -> html_table_col_begin ();
$this -> bo -> html_text ( $journal_entry [ 'comment' ]);
$this -> html_table_col_end ();
}
$this -> html_table_end ();
$GLOBALS [ 'phpgw' ] -> common -> phpgw_footer ();
$GLOBALS [ 'phpgw' ] -> common -> phpgw_exit ();
}
else
{
echo lang ( 'No version history for this file/directory' );
}
}
}
function view ()
{
if ( $this -> file ) //FIXME
{
$ls_array = $this -> bo -> vfs -> ls ( array (
'string' => $this -> path . '/' . $this -> file , //FIXME
'relatives' => array ( RELATIVE_ALL ),
'checksubdirs' => False ,
'nofiles' => True
));
if ( $ls_array [ 0 ][ 'mime_type' ])
{
$mime_type = $ls_array [ 0 ][ 'mime_type' ];
}
elseif ( $this -> prefs [ 'viewtextplain' ])
{
$mime_type = 'text/plain' ;
}
$viewable = array ( '' , 'text/plain' , 'text/csv' , 'text/html' , 'text/text' );
if ( in_array ( $mime_type , $viewable ) && ! $_GET [ 'download' ])
{
header ( 'Content-type: ' . $mime_type );
header ( 'Content-disposition: filename="' . $this -> file . '"' ); //FIXME
Header ( " Pragma: public " );
}
else
{
$GLOBALS [ 'phpgw' ] -> browser -> content_header ( $this -> file , $mime_type ); //FIXME
}
echo $this -> bo -> vfs -> read ( array (
'string' => $this -> path . '/' . $this -> file , //FIXME
'relatives' => array ( RELATIVE_NONE )
));
$GLOBALS [ 'phpgw' ] -> common -> phpgw_exit ();
}
}
function download ()
{
for ( $i = 0 ; $i != $this -> numoffiles ; $i ++ )
{
if ( ! $this -> fileman [ $i ])
{
continue ;
}
$download_browser = CreateObject ( 'phpgwapi.browser' );
$download_browser -> content_header ( $this -> fileman [ $i ]);
echo $this -> bo -> vfs -> read ( array ( 'string' => $this -> fileman [ $i ]));
$GLOBALS [ 'phpgw' ] -> common -> phpgw_exit ();
}
}
//give back an array with all directories except current and dirs that are not accessable
function all_other_directories_options ()
{
# First we get the directories in their home directory
$dirs = array ();
$dirs [] = array ( 'directory' => $this -> bo -> fakebase , 'name' => $this -> bo -> userinfo [ 'account_lid' ]);
$tmp_arr = array (
'string' => $this -> bo -> homedir ,
'relatives' => array ( RELATIVE_NONE ),
'checksubdirs' => True ,
'mime_type' => 'Directory'
);
$ls_array = $this -> bo -> vfs -> ls ( $tmp_arr );
while ( list ( $num , $dir ) = each ( $ls_array ))
{
$dirs [] = $dir ;
}
# Then we get the directories in their readable groups' home directories
reset ( $this -> readable_groups );
while ( list ( $num , $group_array ) = each ( $this -> readable_groups ))
{
# Don't list directories for groups that don't have access
if ( ! $this -> groups_applications [ $group_array [ 'account_name' ]][ $this -> bo -> appname ][ 'enabled' ])
{
continue ;
}
$dirs [] = array ( 'directory' => $this -> bo -> fakebase , 'name' => $group_array [ 'account_name' ]);
$tmp_arr = array (
'string' => $this -> bo -> fakebase . '/' . $group_array [ 'account_name' ],
'relatives' => array ( RELATIVE_NONE ),
'checksubdirs' => True ,
'mime_type' => 'Directory'
);
$ls_array = $this -> bo -> vfs -> ls ( $tmp_arr );
while ( list ( $num , $dir ) = each ( $ls_array ))
{
$dirs [] = $dir ;
}
}
reset ( $dirs );
while ( list ( $num , $dir ) = each ( $dirs ))
{
if ( ! $dir [ 'directory' ])
{
continue ;
}
# So we don't display //
if ( $dir [ 'directory' ] != '/' )
{
$dir [ 'directory' ] .= '/' ;
}
# No point in displaying the current directory, or a directory that doesn't exist
if ((( $dir [ 'directory' ] . $dir [ 'name' ]) != $this -> path ) && $this -> bo -> vfs -> file_exists ( array ( 'string' => $dir [ 'directory' ] . $dir [ 'name' ], 'relatives' => array ( RELATIVE_NONE ))))
{
//FIXME replace the html_form_option function
$options .= $this -> html_form_option ( $dir [ 'directory' ] . $dir [ 'name' ], $dir [ 'directory' ] . $dir [ 'name' ]);
}
}
return $options ;
}
/* seek icon for mimetype else return an unknown icon */
function mime_icon ( $mime_type , $size = 16 )
{
if ( ! $mime_type ) $mime_type = 'unknown' ;
$mime_type = str_replace ( '/' , '_' , $mime_type );
$img = $GLOBALS [ 'phpgw' ] -> common -> image ( 'filemanager' , 'mime' . $size . '_' . strtolower ( $mime_type ));
if ( ! $img ) $img = $GLOBALS [ 'phpgw' ] -> common -> image ( 'filemanager' , 'mime' . $size . '_unknown' );
$icon = '<img src="' . $img . ' "alt="' . lang ( $mime_type ) . '" />' ;
return $icon ;
}
function buttonImage ( $link , $img = '' , $help = '' )
{
$image = $GLOBALS [ 'phpgw' ] -> common -> image ( 'filemanager' , 'button_' . strtolower ( $img ));
if ( $img )
{
return ' < td class = " fmButton " align = " center " valign = " middle " height = " 28 " width = " 28 " >
< a href = " '. $link .' " title = " '. $help .' " >< img src = " '. $image .' " alt = " '. $help .' " /></ a >
</ td > ' ;
}
}
function inputImage ( $name , $img = '' , $help = '' )
{
$image = $GLOBALS [ 'phpgw' ] -> common -> image ( 'filemanager' , 'button_' . strtolower ( $img ));
if ( $img )
{
return ' < td class = " fmButton " align = " center " valign = " middle " height = " 28 " width = " 28 " >
< input title = " '. $help .' " name = " '. $name .' " type = " image " alt = " '. $name .' " src = " '. $image .' " value = " clicked " />
</ td > ' ;
}
}
function html_form_input ( $type = NULL , $name = NULL , $value = NULL , $maxlength = NULL , $size = NULL , $checked = NULL , $string = '' , $return = 1 )
{
$text = ' ' ;
if ( $type != NULL && $type )
{
if ( $type == 'checkbox' )
{
$value = $this -> bo -> string_encode ( $value , 1 );
}
$text .= 'type="' . $type . '" ' ;
}
if ( $name != NULL && $name )
{
$text .= 'name="' . $name . '" ' ;
}
if ( $value != NULL && $value )
{
$text .= 'value="' . $value . '" ' ;
}
if ( is_int ( $maxlength ) && $maxlength >= 0 )
{
$text .= 'maxlength="' . $maxlength . '" ' ;
}
if ( is_int ( $size ) && $size >= 0 )
{
$text .= 'size="' . $size . '" ' ;
}
if ( $checked != NULL && $checked )
{
$text .= 'checked ' ;
}
return '<input' . $text . $string . '>' ;
}
function html_form_option ( $value = NULL , $displayed = NULL , $selected = NULL , $return = 0 )
{
$text = ' ' ;
if ( $value != NULL && $value )
{
$text .= ' value="' . $value . '" ' ;
}
if ( $selected != NULL && $selected )
{
$text .= ' selected' ;
}
return '<option' . $text . '>' . $displayed . '</option>' ;
}
function encode_href ( $href = NULL , $args = NULL , $extra_args )
{
$href = $this -> bo -> string_encode ( $href , 1 );
$all_args = $args . '&' . $this -> bo -> string_encode ( $extra_args , 1 );
$address = $GLOBALS [ 'phpgw' ] -> link ( $href , $all_args );
return $address ;
}
function html_link ( $href = NULL , $args = NULL , $extra_args , $text = NULL , $return = 1 , $encode = 1 , $linkonly = 0 , $target = NULL )
{
// unset($encode);
if ( $encode )
{
$href = $this -> bo -> string_encode ( $href , 1 );
$all_args = $args . '&' . $this -> bo -> string_encode ( $extra_args , 1 );
}
else
{
// $href = $this->bo->string_encode($href, 1);
$all_args = $args . '&' . $extra_args ;
}
###
# This decodes / back to normal
###
// $all_args = preg_replace("/%2F/", "/", $all_args);
// $href = preg_replace("/%2F/", "/", $href);
/* Auto-detect and don't disturb absolute links */
if ( ! preg_match ( " |^http(. { 0,1})://| " , $href ))
{
//Only add an extra / if there isn't already one there
// die(SEP);
if ( ! ( $href [ 0 ] == SEP ))
{
$href = SEP . $href ;
}
/* $phpgw->link requires that the extra vars be passed separately */
// $link_parts = explode("?", $href);
$address = $GLOBALS [ 'phpgw' ] -> link ( $href , $all_args );
// $address = $GLOBALS['phpgw']->link($href);
}
else
{
$address = $href ;
}
/* If $linkonly is set, don't add any HTML */
if ( $linkonly )
{
$rstring = $address ;
}
else
{
if ( $target )
{
$target = 'target=' . $target ;
}
$text = trim ( $text );
$rstring = '<a href="' . $address . '" ' . $target . '>' . $text . '</a>' ;
}
return ( $this -> bo -> eor ( $rstring , $return ));
}
function html_table_begin ( $width = NULL , $border = NULL , $cellspacing = NULL , $cellpadding = NULL , $rules = NULL , $string = '' , $return = 0 )
{
if ( $width != NULL && $width )
{
$width = " width= $width " ;
}
if ( is_int ( $border ) && $border >= 0 )
{
$border = " border= $border " ;
}
if ( is_int ( $cellspacing ) && $cellspacing >= 0 )
{
$cellspacing = " cellspacing= $cellspacing " ;
}
if ( is_int ( $cellpadding ) && $cellpadding >= 0 )
{
$cellpadding = " cellpadding= $cellpadding " ;
}
if ( $rules != NULL && $rules )
{
$rules = " rules= $rules " ;
}
$rstring = " <table $width $border $cellspacing $cellpadding $rules $string > " ;
return ( $this -> bo -> eor ( $rstring , $return ));
}
function html_table_end ( $return = 0 )
{
$rstring = " </table> " ;
return ( $this -> bo -> eor ( $rstring , $return ));
}
function html_table_row_begin ( $align = NULL , $halign = NULL , $valign = NULL , $bgcolor = NULL , $string = '' , $return = 0 )
{
if ( $align != NULL && $align )
{
$align = " align= $align " ;
}
if ( $halign != NULL && $halign )
{
$halign = " halign= $halign " ;
}
if ( $valign != NULL && $valign )
{
$valign = " valign= $valign " ;
}
if ( $bgcolor != NULL && $bgcolor )
{
$bgcolor = " bgcolor= $bgcolor " ;
}
$rstring = " <tr $align $halign $valign $bgcolor $string > " ;
return ( $this -> bo -> eor ( $rstring , $return ));
}
function html_table_row_end ( $return = 0 )
{
$rstring = " </tr> " ;
return ( $this -> bo -> eor ( $rstring , $return ));
}
function html_table_col_begin ( $align = NULL , $halign = NULL , $valign = NULL , $rowspan = NULL , $colspan = NULL , $string = '' , $return = 0 )
{
if ( $align != NULL && $align )
{
$align = " align= $align " ;
}
if ( $halign != NULL && $halign )
{
$halign = " halign= $halign " ;
}
if ( $valign != NULL && $valign )
{
$valign = " valign= $valign " ;
}
if ( is_int ( $rowspan ) && $rowspan >= 0 )
{
$rowspan = " rowspan= $rowspan " ;
}
if ( is_int ( $colspan ) && $colspan >= 0 )
{
$colspan = " colspan= $colspan " ;
}
$rstring = " <td $align $halign $valign $rowspan $colspan $string > " ;
return ( $this -> bo -> eor ( $rstring , $return ));
}
function html_table_col_end ( $return = 0 )
{
$rstring = " </td> " ;
return ( $this -> bo -> eor ( $rstring , $return ));
}
}