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 (); //some fixes in this section were supplied by Michael Totschnig 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; } } $$var = $temp; } elseif (isset ($$var)) { $$var = stripslashes (base64_decode(urldecode ($$var))); } } } } if ($noheader || $nofooter || ($download && (count ($fileman) > 0)) || ($op == 'view' && $file) || ($op == 'history' && $file) || ($op == 'help' && $help_name)) { $noheader = True; $nofooter = True; } $GLOBALS['phpgw_info']['flags'] = array ( 'currentapp' => 'filemanager', 'noheader' => $noheader, 'nofooter' => $nofooter, 'noappheader' => False, 'enable_vfs_class' => True, 'enable_browser_class' => True ); include ('../header.inc.php'); if ($execute && $command_line) { if ($result = $GLOBALS['phpgw']->vfs->command_line (array ('command_line' => stripslashes ($command_line)))) { $messages = html_text_bold (lang('Command sucessfully run'),1); if ($result != 1 && strlen ($result) > 0) { $messages .= html_break (2, NULL, 1) . $result; } } else { $messages = $GLOBALS['phpgw']->common->error_list (array (lang('Error running command'))); } } ### # 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 ($go) { $path = $todir; } if (!$path) { $path = $GLOBALS['phpgw']->vfs->pwd (); if (!$path || $GLOBALS['phpgw']->vfs->pwd (array ('full' => False)) == '') { $path = $GLOBALS['homedir']; } } $GLOBALS['phpgw']->vfs->cd (array ('string' => False, 'relatives' => array (RELATIVE_NONE), 'relative' => False)); $GLOBALS['phpgw']->vfs->cd (array ('string' => $path, 'relatives' => array (RELATIVE_NONE), 'relative' => False)); $pwd = $GLOBALS['phpgw']->vfs->pwd (); if (!$cwd = substr ($path, strlen ($GLOBALS['homedir']) + 1)) { $cwd = '/'; } else { $cwd = substr ($pwd, strrpos ($pwd, '/') + 1); } $disppath = $path; /* This just prevents // in some cases */ if ($path == '/') $dispsep = ''; else $dispsep = '/'; if (!($lesspath = substr ($path, 0, strrpos ($path, '/')))) $lesspath = '/'; $now = date ('Y-m-d'); if ($phpwh_debug) { echo "PHPWebHosting debug:
path: $path
disppath: $disppath
cwd: $cwd
lesspath: $lesspath

phpGW debug:
real getabsolutepath: " . $GLOBALS['phpgw']->vfs->getabsolutepath (array ('target' => False, 'mask' => False, 'fake' => False)) . "
fake getabsolutepath: " . $GLOBALS['phpgw']->vfs->getabsolutepath (array ('target' => False)) . "
appsession: " . $GLOBALS['phpgw']->session->appsession ('vfs','') . "
pwd: " . $GLOBALS['phpgw']->vfs->pwd () . "
"; } ### # Get their readable groups to be used throughout the script ### $groups = array (); $groups = $GLOBALS['phpgw']->accounts->get_list ('groups'); $readable_groups = array (); while (list ($num, $account) = each ($groups)) { if ($GLOBALS['phpgw']->vfs->acl_check (array ( 'owner_id' => $account['account_id'], 'operation' => PHPGW_ACL_READ )) ) { $readable_groups[$account['account_lid']] = Array('account_id' => $account['account_id'], 'account_name' => $account['account_lid']); } } $groups_applications = array (); while (list ($num, $group_array) = each ($readable_groups)) { $group_id = $GLOBALS['phpgw']->accounts->name2id ($group_array['account_name']); $applications = CreateObject('phpgwapi.applications', $group_id); $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 ('+^'.$GLOBALS['fakebase'].'\/(.*)(\/|$)+U', $path, $matches)) && $matches[1] != $GLOBALS['userinfo']['account_lid']) { $GLOBALS['phpgw']->vfs->working_id = $GLOBALS['phpgw']->accounts->name2id ($matches[1]); } else { $GLOBALS['phpgw']->vfs->working_id = $GLOBALS['userinfo']['username']; } if ($path != $GLOBALS['homedir'] && $path != $GLOBALS['fakebase'] && $path != '/' && !$GLOBALS['phpgw']->vfs->acl_check (array ( 'string' => $path, 'relatives' => array (RELATIVE_NONE), 'operation' => PHPGW_ACL_READ )) ) { echo $GLOBALS['phpgw']->common->error_list (array (lang('You do not have access to %1', $path))); html_break (2); html_link ($GLOBALS['appname'].'/index.php?path='.$GLOBALS['homedir'], lang('Go to your home directory')); html_page_close (); } $GLOBALS['userinfo']['working_id'] = $GLOBALS['phpgw']->vfs->working_id; $GLOBALS['userinfo']['working_lid'] = $GLOBALS['phpgw']->accounts->id2name ($GLOBALS['userinfo']['working_id']); ### # If their home directory doesn't exist, we create it # Same for group directories ### if (($path == $GLOBALS['homedir']) && !$GLOBALS['phpgw']->vfs->file_exists (array ( 'string' => $GLOBALS['homedir'], 'relatives' => array (RELATIVE_NONE) )) ) { $GLOBALS['phpgw']->vfs->override_acl = 1; if (!$GLOBALS['phpgw']->vfs->mkdir (array ('string' => $GLOBALS['homedir'], 'relatives' => array (RELATIVE_NONE)))) { $p = $phpgw->vfs->path_parts (array ('string' => $GLOBALS['homedir'], 'relatives' => array (RELATIVE_NONE))); echo $GLOBALS['phpgw']->common->error_list (array (lang('Could not create directory %1', $GLOBALS['homedir'] . ' (' . $p->real_full_path . ')'))); } $GLOBALS['phpgw']->vfs->override_acl = 0; } ### # Verify path is real ### if ($path != $GLOBALS['homedir'] && $path != '/' && $path != $GLOBALS['fakebase']) { if (!$GLOBALS['phpgw']->vfs->file_exists (array ('string' => $path, 'relatives' => array (RELATIVE_NONE)))) { echo $GLOBALS['phpgw']->common->error_list (array (lang('Directory %1 does not exist', $path))); html_break (2); html_link ($GLOBALS['appname'].'/index.php?path='.$GLOBALS['homedir'], lang('Go to your home directory')); html_break (2); html_link_back (); html_page_close (); } } /* Update if they request it, or one out of 20 page loads */ srand ((double) microtime() * 1000000); if ($update || rand (0, 19) == 4) { $GLOBALS['phpgw']->vfs->update_real (array ('string' => $path, 'relatives' => array (RELATIVE_NONE))); } ### # Check available permissions for $path, so we can disable unusable operations in user interface ### if ($GLOBALS['phpgw']->vfs->acl_check (array ( 'string' => $path, 'relatives' => array (RELATIVE_NONE), 'operation' => PHPGW_ACL_ADD )) ) { $can_add = True; } ### # Default is to sort by name ### if (!$sortby) { $sortby = 'name'; } ### # Decide how many upload boxes to show ### if (!$show_upload_boxes || $show_upload_boxes <= 0) { if (!$show_upload_boxes = $GLOBALS['settings']['show_upload_boxes']) { $show_upload_boxes = 5; } } ### # 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 ### $numoffiles = 0; if ($path == $GLOBALS['fakebase']) { if (!$GLOBALS['phpgw']->vfs->file_exists (array ('string' => $GLOBALS['homedir'], 'relatives' => array (RELATIVE_NONE)))) { $GLOBALS['phpgw']->vfs->mkdir (array ('string' => $GLOBALS['homedir'], 'relatives' => array (RELATIVE_NONE))); } $ls_array = $GLOBALS['phpgw']->vfs->ls (array ( 'string' => $GLOBALS['homedir'], 'relatives' => array (RELATIVE_NONE), 'checksubdirs' => False, 'nofiles' => True ) ); $files_array[] = $ls_array[0]; $numoffiles++; // $files_array = $ls_array; // $numoffiles = count($ls_array); reset ($readable_groups); while (list ($num, $group_array) = each ($readable_groups)) { ### # If the group doesn't have access to this app, we don't show it ### if (!$groups_applications[$group_array['account_name']][$GLOBALS['appname']]['enabled']) { continue; } if (!$GLOBALS['phpgw']->vfs->file_exists (array ( 'string' => $GLOBALS['fakebase'].'/'.$group_array['account_name'], 'relatives' => array (RELATIVE_NONE) )) ) { $GLOBALS['phpgw']->vfs->override_acl = 1; $GLOBALS['phpgw']->vfs->mkdir (array ( 'string' => $GLOBALS['fakebase'].'/'.$group_array['account_name'], 'relatives' => array (RELATIVE_NONE) ) ); $GLOBALS['phpgw']->vfs->override_acl = 0; $GLOBALS['phpgw']->vfs->set_attributes (array ( 'string' => $GLOBALS['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 = $GLOBALS['phpgw']->vfs->ls (array ( 'string' => $GLOBALS['fakebase'].'/'.$group_array['account_name'], 'relatives' => array (RELATIVE_NONE), 'checksubdirs' => False, 'nofiles' => True ) ); $files_array[] = $ls_array[0]; $numoffiles++; } } else { $ls_array = $GLOBALS['phpgw']->vfs->ls (array ( 'string' => $path, 'relatives' => array (RELATIVE_NONE), 'checksubdirs' => False, 'nofiles' => False, 'orderby' => $sortby ) ); if ($phpwh_debug) { echo '# of files found in "'.$path.'" : '.count($ls_array).'
'."\n"; } while (list ($num, $file_array) = each ($ls_array)) { $numoffiles++; $files_array[] = $file_array; if ($phpwh_debug) { echo 'Filename: '.$file_array['name'].'
'."\n"; } } } if (!is_array ($files_array)) { $files_array = array (); } if ($download) { for ($i = 0; $i != $numoffiles; $i++) { if (!$fileman[$i]) { continue; } $download_browser = CreateObject ('phpgwapi.browser'); $download_browser->content_header ($fileman[$i]); echo $GLOBALS['phpgw']->vfs->read (array ('string' => $fileman[$i])); $GLOBALS['phpgw']->common->phpgw_exit (); } } if ($op == 'view' && $file) { $ls_array = $GLOBALS['phpgw']->vfs->ls (array ( 'string' => $path.'/'.$file, 'relatives' => array (RELATIVE_ALL), 'checksubdirs' => False, 'nofiles' => True ) ); if ($ls_array[0]['mime_type']) { $mime_type = $ls_array[0]['mime_type']; } elseif ($GLOBALS['settings']['viewtextplain']) { $mime_type = 'text/plain'; } header('Content-type: ' . $mime_type); echo $GLOBALS['phpgw']->vfs->read (array ( 'string' => $path.'/'.$file, 'relatives' => array (RELATIVE_NONE) ) ); $GLOBALS['phpgw']->common->phpgw_exit (); } if ($op == 'history' && $file) { $journal_array = $GLOBALS['phpgw']->vfs->get_journal (array ( 'string' => $file, 'relatives' => array (RELATIVE_ALL) ) ); if (is_array ($journal_array)) { html_table_begin (); html_table_row_begin (); html_table_col_begin (); html_text_bold (lang('Date')); html_table_col_end (); html_table_col_begin (); html_text_bold (lang('Version')); html_table_col_end (); html_table_col_begin (); html_text_bold (lang('Who')); html_table_col_end (); html_table_col_begin (); html_text_bold (lang('Operation')); html_table_col_end (); html_table_row_end (); while (list ($num, $journal_entry) = each ($journal_array)) { html_table_row_begin (); html_table_col_begin (); html_text ($journal_entry['created'] . html_nbsp (3, 1)); html_table_col_end (); html_table_col_begin (); html_text ($journal_entry['version'] . html_nbsp (3, 1)); html_table_col_end (); html_table_col_begin (); html_text ($GLOBALS['phpgw']->accounts->id2name ($journal_entry['owner_id']) . html_nbsp (3, 1)); html_table_col_end (); html_table_col_begin (); html_text ($journal_entry['comment']); html_table_col_end (); } html_table_end (); html_page_close (); } else { html_text_bold (lang('No version history for this file/directory')); } } if ($newfile && $createfile) { if ($badchar = bad_chars ($createfile, True, True)) { echo $GLOBALS['phpgw']->common->error_list (array (html_encode (lang('File names cannot contain "%1"',$badchar), 1))); html_break (2); html_link_back (); html_page_close (); } if ($GLOBALS['phpgw']->vfs->file_exists (array ( 'string' => $createfile, 'relatives' => array (RELATIVE_ALL) )) ) { echo $GLOBALS['phpgw']->common->error_list (array (lang('File %1 already exists. Please edit it or delete it first.', $createfile))); html_break (2); html_link_back (); html_page_close (); } if ($GLOBALS['phpgw']->vfs->touch (array ( 'string' => $createfile, 'relatives' => array (RELATIVE_ALL) )) ) { $fileman = array (); $fileman[0] = $createfile; $edit = 1; $numoffiles++; } else { echo $GLOBALS['phpgw']->common->error_list (array (lang('File %1 could not be created.', $createfile))); } } if ($op == 'help' && $help_name) { while (list ($num, $help_array) = each ($help_info)) { if ($help_array[0] != $help_name) continue; $help_array[1] = preg_replace ("/\[(.*)\|(.*)\]/Ue", "html_help_link ('\\1', '\\2', False, True)", $help_array[1]); $help_array[1] = preg_replace ("/\[(.*)\]/Ue", "html_help_link ('\\1', '\\1', False, True)", $help_array[1]); html_font_set ('4'); $title = ereg_replace ('_', ' ', $help_array[0]); $title = ucwords ($title); html_text ($title); html_font_end (); html_break (2); html_font_set ('2'); html_text ($help_array[1]); html_font_end (); } $GLOBALS['phpgw']->common->phpgw_exit (); } ### # Start Main Page ### html_page_begin (lang('Users').' :: '.$GLOBALS['userinfo']['username']); html_page_body_begin (HTML_PAGE_BODY_COLOR); if ($messages) { html_text ($messages); } if (!count ($GLOBALS['settings'])) { $pref = CreateObject ('phpgwapi.preferences', $GLOBALS['userinfo']['username']); $pref->read_repository (); $GLOBALS['phpgw']->hooks->single ('add_def_pref', $GLOBALS['appname']); $pref->save_repository (True); $pref_array = $pref->read_repository (); $GLOBALS['settings'] = $pref_array[$GLOBALS['appname']]; } ### # Start Main Table ### if (!$op && !$delete && !$createdir && !$renamefiles && !$move && !$copy && !$edit && !$comment_files) { html_table_begin ('100%'); html_table_row_begin (); html_table_col_begin ('center', NULL, 'top'); html_align ('center'); html_form_begin ($GLOBALS['appname'].'/index.php?path='.$path); if ($numoffiles || $cwd) { while (list ($num, $name) = each ($GLOBALS['settings'])) { if ($name) { $columns++; } } $columns++; html_table_begin (); html_table_row_begin (NULL, NULL, NULL, HTML_TABLE_FILES_HEADER_BG_COLOR); html_table_col_begin ('center', NULL, NULL, NULL, $columns); html_table_begin ('100%'); html_table_row_begin (); html_table_col_begin ('left'); if ($path != '/') { html_link ($GLOBALS['appname'].'/index.php?path='.$lesspath, html_image ('images/folder-up.gif', lang('Up'), 'left', 0, NULL, 1)); html_help_link ('up'); } html_table_col_end (); html_table_col_begin ('center'); if ($cwd) { if ($path == $GLOBALS['homedir']) { html_image ('images/folder-home.gif', lang('Folder'), 'center'); } else { html_image ('images/folder.gif', lang('Folder'), 'center'); } } else { html_image ('images/folder-home.gif', lang('Home')); } html_font_set (4, HTML_TABLE_FILES_HEADER_TEXT_COLOR); html_text_bold ($disppath); html_font_end (); html_help_link ('directory_name'); html_table_col_end (); html_table_col_begin ('right'); if ($path != $GLOBALS['homedir']) { html_link ($GLOBALS['appname'].'/index.php?path='.$GLOBALS['homedir'], html_image ('images/folder-home.gif', lang('Home'), 'right', 0, NULL, 1)); html_help_link ('home'); } html_table_col_end (); html_table_row_end (); html_table_end (); html_table_col_end (); html_table_row_end (); html_table_row_begin (NULL, NULL, NULL, HTML_TABLE_FILES_COLUMN_HEADER_BG_COLOR); ### # Start File Table Column Headers # Reads values from $file_attributes array and preferences ### html_table_col_begin (); html_text (lang('Sort by:') . html_nbsp (1, 1), NULL, NULL, 0); html_help_link ('sort_by'); html_table_col_end (); reset ($file_attributes); while (list ($internal, $displayed) = each ($file_attributes)) { if ($GLOBALS['settings'][$internal]) { html_table_col_begin (); html_link ($GLOBALS['appname'].'/index.php?path='.$path.'&sortby='.$internal, html_text_bold ($displayed, 1, 0)); html_help_link (strtolower (ereg_replace (' ', '_', $displayed))); html_table_col_end (); } } html_table_col_begin (); html_table_col_end (); html_table_row_end (); if ($GLOBALS['settings']['dotdot'] && $GLOBALS['settings']['name'] && $path != '/') { html_table_row_begin (); html_table_col_begin (); html_table_col_end (); /* We can assume the next column is the name */ html_table_col_begin (); html_image ('images/folder.gif', lang('Folder')); html_link ($GLOBALS['appname'].'/index.php?path='.$lesspath, '..'); html_table_col_end (); if ($GLOBALS['settings']['mime_type']) { html_table_col_begin (); html_text (lang('Directory')); html_table_col_end (); } html_table_row_end (); } ### # List all of the files, with their attributes ### reset ($files_array); for ($i = 0; $i != $numoffiles; $i++) { $files = $files_array[$i]; if ($rename || $edit_comments) { unset ($this_selected); unset ($renamethis); unset ($edit_this_comment); for ($j = 0; $j != $numoffiles; $j++) { if ($fileman[$j] == $files['name']) { $this_selected = 1; break; } } if ($rename && $this_selected) { $renamethis = 1; } elseif ($edit_comments && $this_selected) { $edit_this_comment = 1; } } if (!$GLOBALS['settings']['dotfiles'] && ereg ("^\.", $files['name'])) { continue; } html_table_row_begin (NULL, NULL, NULL, HTML_TABLE_FILES_BG_COLOR); ### # Checkboxes ### html_table_col_begin ('right'); if (!$rename && !$edit_comments && $path != $GLOBALS['fakebase'] && $path != '/') { html_form_input ('checkbox', 'fileman['.$i.']', base64_encode ($files['name'])); } elseif ($renamethis) { html_form_input ('hidden', 'fileman[' . base64_encode ($files['name']) . ']', $files['name'], NULL, NULL, 'checked'); } else { html_nbsp(); } html_table_col_end (); ### # File name and icon ### if ($GLOBALS['settings']['name']) { if ($phpwh_debug) { echo 'Setting file name: '.$files['name'].'
'."\n"; } html_table_col_begin (); if ($renamethis) { if ($files['mime_type'] == 'Directory') { html_image ('images/folder.gif', lang('Folder')); } html_form_input ('text', 'renamefiles[' . base64_encode ($files['name']) . ']', $files['name'], 255); } else { if ($files['mime_type'] == 'Directory') { html_image ('images/folder.gif', lang('Folder')); html_link ($GLOBALS['appname'].'/index.php?path='.$path.$dispsep.$files['name'], $files['name']); } else { if ($GLOBALS['settings']['viewonserver'] && isset ($GLOBALS['filesdir']) && !$files['link_directory']) { $clickview = $GLOBALS['filesdir'].$pwd.'/'.$files['name']; if ($phpwh_debug) { echo 'Setting clickview = '.$clickview.'
'."\n"; } } else { $clickview = $GLOBALS['appname'].'/index.php?op=view&file='.$files['name'].'&path='.$path; } if ($GLOBALS['settings']['viewinnewwin']) { $target = '_new'; } html_link ($clickview, $files['name'], 0, 1, 0, $target); } } html_table_col_end (); } ### # MIME type ### if ($GLOBALS['settings']['mime_type']) { html_table_col_begin (); html_text ($files['mime_type']); html_table_col_end (); } ### # File size ### if ($GLOBALS['settings']['size']) { html_table_col_begin (); $size = $GLOBALS['phpgw']->vfs->get_size (array ( 'string' => $files['directory'] . '/' . $files['name'], 'relatives' => array (RELATIVE_NONE) ) ); borkb ($size); html_table_col_end (); } ### # Date created ### if ($GLOBALS['settings']['created']) { html_table_col_begin (); html_text ($files['created']); html_table_col_end (); } ### # Date modified ### if ($GLOBALS['settings']['modified']) { html_table_col_begin (); if ($files['modified'] != '0000-00-00') { html_text ($files['modified']); } html_table_col_end (); } ### # Owner name ### if ($GLOBALS['settings']['owner']) { html_table_col_begin (); html_text ($GLOBALS['phpgw']->accounts->id2name ($files['owner_id'])); html_table_col_end (); } ### # Creator name ### if ($GLOBALS['settings']['createdby_id']) { html_table_col_begin (); if ($files['createdby_id']) { html_text ($GLOBALS['phpgw']->accounts->id2name ($files['createdby_id'])); } html_table_col_end (); } ### # Modified by name ### if ($GLOBALS['settings']['modifiedby_id']) { html_table_col_begin (); if ($files['modifiedby_id']) { html_text ($GLOBALS['phpgw']->accounts->id2name ($files['modifiedby_id'])); } html_table_col_end (); } ### # Application ### if ($GLOBALS['settings']['app']) { html_table_col_begin (); html_text ($files['app']); html_table_col_end (); } ### # Comment ### if ($GLOBALS['settings']['comment']) { html_table_col_begin (); if ($edit_this_comment) { html_form_input ('text', 'comment_files[' . base64_encode ($files['name']) . ']', html_encode ($files['comment'], 1), 255); } else { html_text ($files['comment']); } html_table_col_end (); } ### # Version ### if ($GLOBALS['settings']['version']) { html_table_col_begin (); html_link ($GLOBALS['appname'].'/index.php?op=history&file='.$files['name'].'&path='.$path, $files['version'], NULL, True, NULL, '_new'); html_table_col_end (); } ### # Deleteable (currently not used) ### if ($GLOBALS['settings']['deleteable']) { if ($files['deleteable'] == 'N') { html_table_col_begin (); html_image ('images/locked.gif', lang('Locked')); html_table_col_end (); } else { html_table_col_begin (); html_table_col_end (); } } html_table_row_end (); if ($files['mime_type'] == 'Directory') { $usedspace += $fileinfo[0]; } else { $usedspace += $files['size']; } } html_table_end (); html_break (2); if ($path != '/' && $path != $GLOBALS['fakebase']) { if (!$rename && !$edit_comments) { html_form_input ('submit', 'edit', lang('Edit')); html_help_link ('edit'); html_nbsp (3); } if (!$edit_comments) { html_form_input ('submit', 'rename', lang('Rename')); html_help_link ('rename'); html_nbsp (3); } if (!$rename && !$edit_comments) { html_form_input ('submit', 'delete', lang('Delete')); html_help_link ('delete'); html_nbsp (3); } if (!$rename) { html_form_input ('submit', 'edit_comments', lang('Edit comments')); html_help_link ('edit_comments'); } } } ### # Display some inputs and info, but not when renaming or editing comments ### if (!$rename && !$edit_comments) { ### # Begin Copy to/Move to selection ### html_break (1); html_form_input ('submit', 'go', lang('Go to:')); html_help_link ('go_to'); if ($path != '/' && $path != $GLOBALS['fakebase']) { html_form_input ('submit', 'copy', lang('Copy to:')); html_help_link ('copy_to'); html_form_input ('submit', 'move', lang('Move to:')); html_help_link ('move_to'); } html_form_select_begin ('todir'); html_break (1); ### # First we get the directories in their home directory ### $dirs = array (); $dirs[] = array ('directory' => $GLOBALS['fakebase'], 'name' => $GLOBALS['userinfo']['account_lid']); $ls_array = $GLOBALS['phpgw']->vfs->ls (array ( 'string' => $GLOBALS['homedir'], 'relatives' => array (RELATIVE_NONE), 'checksubdirs' => True, 'mime_type' => 'Directory' ) ); while (list ($num, $dir) = each ($ls_array)) { $dirs[] = $dir; } ### # Then we get the directories in their readable groups' home directories ### reset ($readable_groups); while (list ($num, $group_array) = each ($readable_groups)) { ### # Don't list directories for groups that don't have access ### if (!$groups_applications[$group_array['account_name']][$GLOBALS['appname']]['enabled']) { continue; } $dirs[] = array ('directory' => $GLOBALS['fakebase'], 'name' => $group_array['account_name']); $ls_array = $phpgw->vfs->ls (array ( 'string' => $GLOBALS['fakebase'].'/'.$group_array['account_name'], 'relatives' => array (RELATIVE_NONE), 'checksubdirs' => True, 'mime_type' => 'Directory' ) ); 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']) != $path) && $GLOBALS['phpgw']->vfs->file_exists (array ( 'string' => $dir['directory'] . $dir['name'], 'relatives' => array (RELATIVE_NONE) )) ) { html_form_option ($dir['directory'] . $dir['name'], $dir['directory'] . $dir['name']); } } html_form_select_end (); html_help_link ('directory_list'); if ($path != '/' && $path != $GLOBALS['fakebase']) { html_break (1); html_form_input ('submit', 'download', lang('Download')); html_help_link ('download'); html_nbsp (3); if ($can_add) { html_form_input ('text', 'createdir', NULL, 255, 15); html_form_input ('submit', 'newdir', lang('Create Folder')); html_help_link ('create_folder'); } } html_break (1); html_form_input ('submit', 'update', lang('Update')); html_help_link ('update'); if ($path != '/' && $path != $GLOBALS['fakebase'] && $can_add) { html_nbsp (3); html_form_input ('text', 'createfile', NULL, 255, 15); html_form_input ('submit', 'newfile', lang('Create File')); html_help_link ('create_file'); } if ($GLOBALS['settings']['show_command_line']) { html_break (2); html_form_input ('text', 'command_line', NULL, NULL, 50); html_help_link ('command_line'); html_break (1); html_form_input ('submit', 'execute', lang('Execute')); html_help_link ('execute'); } html_form_end (); html_help_link ('file_stats'); html_break (1); html_text_bold (lang('Files').': '); html_text ($numoffiles); html_nbsp (3); html_text_bold (lang('Used space').': '); html_text (borkb ($usedspace, NULL, 1)); html_nbsp (3); if ($path == $GLOBALS['homedir'] || $path == $GLOBALS['fakebase']) { html_text_bold (lang('Unused space').': '); html_text (borkb ($GLOBALS['userinfo']['hdspace'] - $usedspace, NULL, 1)); $ls_array = $GLOBALS['phpgw']->vfs->ls (array ( 'string' => $path, 'relatives' => array (RELATIVE_NONE) ) ); $i = count ($ls_array); html_break (2); html_text_bold (lang('Total Files').': '); html_text ($i); } ### # Show file upload boxes. Note the last argument to html (). Repeats $show_upload_boxes times ### if ($path != '/' && $path != $GLOBALS['fakebase'] && $can_add) { html_break (2); html_form_begin ($GLOBALS['appname'].'/index.php?op=upload&path='.$path, 'post', 'multipart/form-data'); html_table_begin (); html_table_row_begin ('center'); html_table_col_begin (); html_text_bold (lang('File')); html_help_link ('upload_file'); html_table_col_end (); html_table_col_begin (); html_text_bold (lang('Comment')); html_help_link ('upload_comment'); html_table_col_end (); html_table_row_end (); html_table_row_begin (); html_table_col_begin (); html_form_input ('hidden', 'show_upload_boxes', base64_encode ($show_upload_boxes)); html (html_form_input ('file', 'upload_file[]', NULL, 255, NULL, NULL, NULL, 1) . html_break (1, NULL, 1), $show_upload_boxes); html_table_col_end (); html_table_col_begin (); html (html_form_input ('text', 'upload_comment[]', NULL, NULL, NULL, NULL, NULL, 1) . html_break (1, NULL, 1), $show_upload_boxes); html_table_col_end (); html_table_row_end (); html_table_end (); html_form_input ('submit', 'upload_files', lang('Upload files')); html_help_link ('upload_files'); html_break (2); html_text (lang('Show') . html_nbsp (1, True)); html_link ($GLOBALS['appname'].'/index.php?show_upload_boxes=5', '5'); html_nbsp (); html_link ($GLOBALS['appname'].'/index.php?show_upload_boxes=10', '10'); html_nbsp (); html_link ($GLOBALS['appname'].'/index.php?show_upload_boxes=20', '20'); html_nbsp (); html_link ($GLOBALS['appname'].'/index.php?show_upload_boxes=50', '50'); html_nbsp (); html_text (lang('upload fields')); html_nbsp (); html_help_link ('show_upload_fields'); html_form_end (); } } html_table_col_end (); html_table_row_end (); html_table_end (); html_page_close (); } ### # Handle Editing files ### if ($edit) { ### # If $edit is "Edit", we do nothing, and let the for loop take over ### if ($edit_file) { $edit_file_content = stripslashes ($edit_file_content); } if ($edit_preview) { $content = $edit_file_content; html_break (1); html_text_bold (lang('Preview of %1', $path.'/'.$edit_file)); html_break (2); html_table_begin ('90%'); html_table_row_begin (); html_table_col_begin (); html_text (nl2br ($content)); html_table_col_end (); html_table_row_end (); html_table_end (); } elseif ($edit_save) { $content = $edit_file_content; if ($GLOBALS['phpgw']->vfs->write (array ( 'string' => $edit_file, 'relatives' => array (RELATIVE_ALL), 'content' => $content )) ) { html_text_bold (lang('Saved %1', $path.'/'.$edit_file)); html_break (2); html_link_back (); } else { html_text_error (lang('Could not save %1', $path.'/'.$edit_file)); html_break (2); html_link_back (); } } /* This doesn't work just yet elseif ($edit_save_all) { for ($j = 0; $j != $numoffiles; $j++) { $fileman[$j]; $content = $fileman[$j]; echo 'fileman['.$j.']: '.$fileman[$j].'
'.$content.'
'; continue; if ($GLOBALS['phpgw']->vfs->write (array ( 'string' => $fileman[$j], 'relatives' => array (RELATIVE_ALL), 'content' => $content )) ) { html_text_bold (lang('Saved %1', $path.'/'.$fileman[$j])); html_break (1); } else { html_text_error (lang('Could not save %1', $path.'/'.$fileman[$j])); html_break (1); } } html_break (1); } */ ### # Now we display the edit boxes and forms ### for ($j = 0; $j != $numoffiles; $j++) { ### # If we're in preview or save mode, we only show the file # being previewed or saved ### if ($edit_file && ($fileman[$j] != $edit_file)) { continue; } if ($fileman[$j] && $GLOBALS['phpgw']->vfs->file_exists (array ( 'string' => $fileman[$j], 'relatives' => array (RELATIVE_ALL) )) ) { if ($edit_file) { $content = stripslashes ($edit_file_content); } else { $content = $GLOBALS['phpgw']->vfs->read (array ('string' => $fileman[$j])); } html_table_begin ('100%'); html_form_begin ($GLOBALS['appname'].'/index.php?path='.$path); html_form_input ('hidden', 'edit', True); html_form_input ('hidden', 'edit_file', $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 != $numoffiles; $i++) { html_form_input ('hidden', 'fileman['.$i.']', base64_encode ($fileman[$i])); } html_table_row_begin (); html_table_col_begin (); html_form_textarea ('edit_file_content', 35, 75, $content); html_table_col_end (); html_table_col_begin ('center'); html_form_input ('submit', 'edit_preview', lang('Preview %1', html_encode ($fileman[$j], 1))); html_break (1); html_form_input ('submit', 'edit_save', lang('Save %1', html_encode ($fileman[$j], 1))); // html_break (1); // html_form_input ('submit', 'edit_save_all', lang('Save all')); html_table_col_end (); html_table_row_end (); html_break (2); html_form_end (); html_table_end (); } } } ### # Handle File Uploads ### elseif ($op == 'upload' && $path != '/' && $path != $GLOBALS['fakebase']) { for ($i = 0; $i != $show_upload_boxes; $i++) { if ($badchar = bad_chars ($_FILES['upload_file']['name'][$i], True, True)) { echo $GLOBALS['phpgw']->common->error_list (array (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 = $GLOBALS['phpgw']->vfs->ls (array ( 'string' => $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') { echo $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') { $GLOBALS['phpgw']->vfs->set_attributes (array ( 'string' => $_FILES['upload_file']['name'][$i], 'relatives' => array (RELATIVE_ALL), 'attributes' => array ( 'owner_id' => $GLOBALS['userinfo']['username'], 'modifiedby_id' => $GLOBALS['userinfo']['username'], 'modified' => $now, 'size' => $_FILES['upload_file']['size'][$i], 'mime_type' => $_FILES['upload_file']['type'][$i], 'deleteable' => 'Y', 'comment' => stripslashes ($upload_comment[$i]) ) ) ); $GLOBALS['phpgw']->vfs->cp(array ( 'from' => $_FILES['upload_file']['tmp_name'][$i], 'to' => $_FILES['upload_file']['name'][$i], 'relatives' => array (RELATIVE_NONE|VFS_REAL, RELATIVE_ALL) ) ); html_text_summary(lang('Replaced %1', $disppath.'/'.$_FILES['upload_file']['name'][$i]), $_FILES['upload_file']['size'][$i]); } else { $GLOBALS['phpgw']->vfs->cp (array ( 'from' => $_FILES['upload_file']['tmp_name'][$i], 'to' => $_FILES['upload_file']['name'][$i], 'relatives' => array (RELATIVE_NONE|VFS_REAL, RELATIVE_ALL) ) ); $GLOBALS['phpgw']->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 ($upload_comment[$i]) ) ) ); html_text_summary(lang('Created %1', $disppath.'/'.$_FILES['upload_file']['name'][$i]), $_FILES['upload_file']['size'][$i]); } } elseif ($_FILES['upload_file']['name'][$i]) { $GLOBALS['phpgw']->vfs->touch (array ( 'string' => $_FILES['upload_file']['name'][$i], 'relatives' => array (RELATIVE_ALL) ) ); $GLOBALS['phpgw']->vfs->set_attributes (array ( 'string' => $_FILES['upload_file']['name'][$i], 'relatives' => array (RELATIVE_ALL), 'attributes' => array ( 'mime_type' => $_FILES['upload_file']['type'][$i], 'comment' => $upload_comment[$i] ) ) ); html_text_summary(lang('Created %1', $disppath.'/'.$_FILES['upload_file']['name'][$i]), $file_size[$i]); } } html_break (2); html_link_back (); } ### # Handle Editing comments ### elseif ($comment_files) { while (list ($file) = each ($comment_files)) { if ($badchar = bad_chars ($comment_files[$file], False, True)) { echo $GLOBALS['phpgw']->common->error_list (array (html_text_italic ($file, 1) . html_encode (': ' . lang('Comments cannot contain "%1"', $badchar), 1))); continue; } $GLOBALS['phpgw']->vfs->set_attributes (array ( 'string' => $file, 'relatives' => array (RELATIVE_ALL), 'attributes' => array ( 'comment' => stripslashes ($comment_files[$file]) ) ) ); html_text_summary (lang('Updated comment for %1', $path.'/'.$file)); } html_break (2); html_link_back (); } ### # Handle Renaming Files and Directories ### elseif ($renamefiles) { while (list ($from, $to) = each ($renamefiles)) { if ($badchar = bad_chars ($to, True, True)) { echo $GLOBALS['phpgw']->common->error_list (array (html_encode (lang('File names cannot contain "%1"', $badchar), 1))); continue; } if (ereg ("/", $to) || ereg ("\\\\", $to)) { echo $GLOBALS['phpgw']->common->error_list (array (lang("File names cannot contain \\ or /"))); } elseif (!$GLOBALS['phpgw']->vfs->mv (array ( 'from' => $from, 'to' => $to )) ) { echo $GLOBALS['phpgw']->common->error_list (array (lang('Could not rename %1 to %2', $disppath.'/'.$from, $disppath.'/'.$to))); } else { html_text_summary (lang('Renamed %1 to %2', $disppath.'/'.$from, $disppath.'/'.$to)); } } html_break (2); html_link_back (); } ### # Handle Moving Files and Directories ### elseif ($move) { while (list ($num, $file) = each ($fileman)) { if ($GLOBALS['phpgw']->vfs->mv (array ( 'from' => $file, 'to' => $todir . '/' . $file, 'relatives' => array (RELATIVE_ALL, RELATIVE_NONE) )) ) { $moved++; html_text_summary (lang('Moved %1 to %2', $disppath.'/'.$file, $todir.'/'.$file)); } else { echo $GLOBALS['phpgw']->common->error_list (array (lang('Could not move %1 to %2', $disppath.'/'.$file, $todir.'/'.$file))); } } if ($moved) { html_break (2); html_link ($GLOBALS['appname'].'/index.php?path='.$todir, lang('Go to %1', $todir)); } html_break (2); html_link_back (); } ### # Handle Copying of Files and Directories ### elseif ($copy) { while (list ($num, $file) = each ($fileman)) { if ($GLOBALS['phpgw']->vfs->cp (array ( 'from' => $file, 'to' => $todir . '/' . $file, 'relatives' => array (RELATIVE_ALL, RELATIVE_NONE) )) ) { $copied++; html_text_summary (lang('Copied %1 to %2', $disppath.'/'.$file, $todir.'/'.$file)); } else { echo $GLOBALS['phpgw']->common->error_list (array (lang('Could not copy %1 to %2', $disppath.'/'.$file, $todir.'/'.$file))); } } if ($copied) { html_break (2); html_link ($GLOBALS['appname'].'/index.php?path='.$todir, lang('Go to %1', $todir)); } html_break (2); html_link_back (); } ### # Handle Deleting Files and Directories ### elseif ($delete) { for ($i = 0; $i != $numoffiles; $i++) { if ($fileman[$i]) { if ($GLOBALS['phpgw']->vfs->delete (array ('string' => $fileman[$i]))) { html_text_summary (lang('Deleted %1', $disppath.'/'.$fileman[$i]), $fileinfo['size']); } else { $GLOBALS['phpgw']->common->error_list (array (lang('Could not delete %1', $disppath.'/'.$fileman[$i]))); } } } html_break (2); html_link_back (); } elseif ($newdir && $createdir) { if ($badchar = bad_chars ($createdir, True, True)) { echo $GLOBALS['phpgw']->common->error_list (array (html_encode (lang('Directory names cannot contain "%1"', $badchar), 1))); html_break (2); html_link_back (); html_page_close (); } if ($createdir[strlen($createdir)-1] == ' ' || $createdir[0] == ' ') { echo $GLOBALS['phpgw']->common->error_list (array (lang('Cannot create directory because it begins or ends in a space'))); html_break (2); html_link_back (); html_page_close (); } $ls_array = $GLOBALS['phpgw']->vfs->ls (array ( 'string' => $path . '/' . $createdir, 'relatives' => array (RELATIVE_NONE), 'checksubdirs' => False, 'nofiles' => True ) ); $fileinfo = $ls_array[0]; if ($fileinfo['name']) { if ($fileinfo['mime_type'] != 'Directory') { echo $GLOBALS['phpgw']->common->error_list (array (lang('%1 already exists as a file', $fileinfo['name']))); html_break (2); html_link_back (); html_page_close (); } else { echo $GLOBALS['phpgw']->common->error_list (array (lang('Directory %1 already exists', $fileinfo['name']))); html_break (2); html_link_back (); html_page_close (); } } else { if ($GLOBALS['phpgw']->vfs->mkdir (array ('string' => $createdir))) { html_text_summary (lang('Created directory %1', $disppath.'/'.$createdir)); html_break (2); html_link ($GLOBALS['appname'].'/index.php?path='.$disppath.'/'.$createdir, lang('Go to %1', $disppath.'/'.$createdir)); } else { echo $GLOBALS['phpgw']->common->error_list (array (lang('Could not create %1', $disppath.'/'.$createdir))); } } html_break (2); html_link_back (); } html_page_close (); ?>