"phpwebhosting", "noheader" => False, "noappheader" => False, "enable_vfs_class" => True); include("../header.inc.php"); error_reporting (4); ### # 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 ### ### # Note that $userinfo["username"] is actually the id number, not the login name ### $userinfo["username"] = $phpgw_info["user"]["account_id"]; $userinfo["account_lid"] = $phpgw->accounts->id2name ($userinfo["username"]); $userinfo["hdspace"] = 10000000000; $homedir = "$fakebase/$userinfo[account_lid]"; ### # Enable this to display some debugging info ### $phpwh_debug = 0; /* This doesn't work yet if ($download && $fileman[0]) { $phpgw->browser->content_header ($fn); echo $phpgw->vfs->read ($path/$fileman[0]); $phpgw->common->phpgw_exit (); } */ ### # Default is to sort by name ### if (!$sortby) $sortby = "name"; ### # Some hacks to set and display directory paths correctly ### if (!$path) { $path = $phpgw->vfs->pwd (); if (!$path || $phpgw->vfs->pwd (False) == "") $path = $homedir; } $extra_dir = substr ($path, strlen ($homedir) + 1); $phpgw->vfs->cd (False, False, array (RELATIVE_NONE)); $phpgw->vfs->cd ($path, False, array (RELATIVE_NONE)); $pwd = $phpgw->vfs->pwd (); if (!$cwd = substr ($path, strlen ($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"); //This will hopefully be replaced by a session management working_id //if (!$phpgw->vfs->working_id = preg_replace ("/\$fakebase\/(.*)\/(.*)$/U", "\\1", $path)) $userinfo["working_id"] = $phpgw->vfs->working_id; $userinfo["working_lid"] = $phpgw->accounts->id2name ($userinfo["working_id"]); if ($phpwh_debug) { echo "PHPWebHosting debug:
path: $path
disppath: $disppath
cwd: $cwd
lesspath: $lesspath

phpGW debug:
real getabsolutepath: " . $phpgw->vfs->getabsolutepath (False, False, False) . "
fake getabsolutepath: " . $phpgw->vfs->getabsolutepath (False) . "
appsession: " . $phpgw->common->appsession () . "
pwd: " . $phpgw->vfs->pwd () . "
"; } ### # If their home directory doesn't exist, we create it ### if (($path == $homedir) && !$phpgw->vfs->file_exists ($homedir, array (RELATIVE_NONE))) { $phpgw->vfs->mkdir ($homedir, array (RELATIVE_NONE)); } elseif (preg_match ("|^$fakebase\/(.*)$|U", $path, $matches)) { if (!$phpgw->vfs->file_exists ($homedir, array (RELATIVE_NONE))) { $phpgw->vfs->mkdir ($path, array (RELATIVE_NONE)); $group_id = $phpgw->accounts->name2id ($matches[1]); $phpgw->vfs->set_attributes ($path, array ("owner_id" => $group_id, "createdby_id" => $group_id), array (RELATIVE_NONE)); } } ### # Verify path is real ### if ($path != $homedir && $path != "/" && $path != $fakebase) { if (!$phpgw->vfs->file_exists ($path, array (RELATIVE_NONE))) { html_text_error ("Directory $dir does not exist", 1); html_break (2); html_link ("$appname/index.php?path=$homedir", "Go to your home directory"); html_break (2); html_link_back (); html_page_close (); } } ### # 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 ### if ($path == $fakebase) { if (!$phpgw->vfs->file_exists ($homedir, array (RELATIVE_NONE))) { $phpgw->vfs->mkdir ($homedir, array (RELATIVE_NONE)); } $files_array[] = $phpgw->vfs->ls ($homedir, array (RELATIVE_NONE), False, False, True); $numoffiles++; $groups = $phpgw->accounts->memberships ($userinfo["username"]); while (list ($num, $group_array) = each ($groups)) { if (!$phpgw->vfs->file_exists ("$fakebase/$group_array[account_name]", array (RELATIVE_NONE))) { $phpgw->vfs->mkdir ("$fakebase/$group_array[account_name]", array (RELATIVE_NONE)); $phpgw->vfs->set_attributes ("$fakebase/$group_array[account_name]", array ("owner_id" => $group_array["account_id"], "createdby_id" => $group_array["account_id"]), array (RELATIVE_NONE)); } $files_array[] = $phpgw->vfs->ls ("$fakebase/$group_array[account_name]", array (RELATIVE_NONE), False, False, True); $numoffiles++; } } else { $files_query = db_query ("SELECT * FROM phpgw_vfs WHERE directory = '$path' AND name != '' ORDER BY $sortby"); $numoffiles = db_call ("affected_rows", $files_query); while ($files_array[] = db_fetch_array ($files_query)) ; } ### # Start Main Page ### if ($op != "changeinfo" && $op != "logout" && $op != "delete") { html_page_begin ("Users :: $userinfo[username]"); html_page_body_begin (HTML_PAGE_BODY_COLOR); } ### # 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 ("$appname/index.php?path=$path"); if ($numoffiles || $cwd) { while (list ($num, $name) = each ($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 ("$appname/index.php?path=$lesspath", html_image ("images/folder-up.gif", "Up", "left", 0, NULL, 1)); html_table_col_end (); html_table_col_begin ("center"); if ($cwd) { if ($path == $homedir) html_image ("images/folder-home.gif", "Folder", "center"); else html_image ("images/folder.gif", "Folder", "center"); } else html_image ("images/folder-home.gif", "Home"); html_font_set (4, HTML_TABLE_FILES_HEADER_TEXT_COLOR); html_text_bold (strtoupper ($disppath)); html_font_end (); html_table_col_end (); html_table_col_begin ("right"); if ($path != $homedir) html_link ("$appname/index.php?path=$homedir", html_image ("images/folder-home.gif", "Home", "right", 0, NULL, 1)); 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 ("Sort by:" . html_nbsp (1, 1), NULL, NULL, 1); html_table_col_end (); reset ($file_attributes); while (list ($internal, $displayed) = each ($file_attributes)) { if ($settings[$internal]) { html_table_col_begin (); html_link ("$appname/index.php?path=$path&sortby=$internal", html_text_bold ("$displayed", 1, 1)); html_table_col_end (); } } html_table_col_begin (); html_table_col_end (); html_table_row_end (); if ($settings["dotdot"] && $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", "Folder"); html_link ("$appname/index.php?path=$lesspath", ".."); html_table_col_end (); if ($settings["mime_type"]) { html_table_col_begin (); html_text ("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] == string_encode ($files["name"], 1)) { $this_selected = 1; break; } } if ($rename && $this_selected) $renamethis = 1; elseif ($edit_comments && $this_selected) $edit_this_comment = 1; } if (!$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) { html_form_input ("checkbox", "fileman[$i]", "$files[name]"); } elseif ($renamethis) { html_form_input ("hidden", "fileman[" . string_encode ($files[name], 1) . "]", "$files[name]", NULL, NULL, "checked"); } else { html_nbsp; } html_table_col_end (); ### # File name and icon ### if ($settings["name"]) { html_table_col_begin (); if ($renamethis) { if ($files["mime_type"] == "Directory") html_image ("images/folder.gif", "Folder"); html_form_input ("text", "renamefiles[" . string_encode ($files[name], 1) . "]", "$files[name]", 255); } else { if ($files["mime_type"] == "Directory") { html_image ("images/folder.gif", "Folder"); html_link ("$appname/index.php?path=$path$dispsep$files[name]", $files["name"]); } elseif (isset ($filesdir)) { html_link ("$filesdir$pwd/$files[name]", $files["name"]); } else { html_text ($files["name"]); } } html_table_col_end (); } ### # MIME type ### if ($settings["mime_type"]) { html_table_col_begin (); html_text ($files["mime_type"]); html_table_col_end (); } ### # File size ### if ($settings["size"]) { html_table_col_begin (); if ($files["mime_type"] == "Directory") { $size_query = db_query ("SELECT SUM(size) FROM phpgw_vfs WHERE owner_id = '$userinfo[username]' AND directory RLIKE '^$disppath/$files[name]'"); $fileinfo = db_fetch_array ($size_query); db_call ("free", $size_query); if ($fileinfo[0]) borkb ($fileinfo[0]+1024); else echo "1KB"; } else borkb ($files["size"]); html_table_col_end (); } ### # Date created ### if ($settings["created"]) { html_table_col_begin (); html_text ($files["created"]); html_table_col_end (); } ### # Date modified ### if ($settings["modified"]) { html_table_col_begin (); if ($files["modified"] != "0000-00-00") html_text ($files["modified"]); html_table_col_end (); } ### # Owner name ### if ($settings["owner"]) { html_table_col_begin (); html_text ($phpgw->accounts->id2name ($files["owner_id"])); html_table_col_end (); } ### # Creator name ### if ($settings["createdby_id"]) { html_table_col_begin (); html_text ($phpgw->accounts->id2name ($files["createdby_id"])); html_table_col_end (); } ### # Modified by name ### if ($settings["modifiedby_id"]) { html_table_col_begin (); html_text ($phpgw->accounts->id2name ($files["modifiedby_id"])); html_table_col_end (); } ### # Application ### if ($settings["app"]) { html_table_col_begin (); html_text ($files["app"]); html_table_col_end (); } ### # Comment ### if ($settings["comment"]) { html_table_col_begin (); if ($edit_this_comment) { html_form_input ("text", "comment_files[" . string_encode ($files[name], 1) . "]", "$files[comment]", 255); } else { html_text ($files["comment"]); } html_table_col_end (); } ### # Deleteable (currently not used) ### if ($settings["deleteable"]) { if ($files["deleteable"] == "N") { html_table_col_begin (); html_image ("images/locked.gif", "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 (!$rename && !$edit_comments) { html_form_input ("submit", "edit", "Edit"); html_nbsp (3); } if (!$edit_comments) { html_form_input ("submit", "rename", "Rename"); html_nbsp (3); } if (!$rename && !$edit_comments) { html_form_input ("submit", "delete", "Delete"); html_nbsp (3); } if (!$rename) { html_form_input ("submit", "edit_comments", "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", "copy", "Copy to:"); html_form_input ("submit", "move", "Move to:"); html_form_select_begin ("todir"); $query3 = db_query ("SELECT name, directory FROM phpgw_vfs WHERE owner_id = '$userinfo[username]' AND mime_type = 'Directory' ORDER BY name"); while ($dirs = db_fetch_array ($query3)) { ### # So we don't display // ### if ($dirs["directory"] != '/') { $dirs["directory"] .= '/'; } ### # No point in displaying the current directory ### if (($dirs["directory"] . $dirs["name"]) != $path) { html_form_option ($dirs["directory"] . $dirs["name"]); } } html_form_select_end (); html_break (1); html_form_input ("submit", "download", "Download"); html_nbsp (3); html_form_input ("text", "createdir", NULL, 255, 15); html_form_input ("submit", "newdir", "Create Folder"); html_form_end (); html_break (1); html_text_bold ("Files: "); html_text ($numoffiles); html_nbsp (3); html_text_bold ("Used space: "); html_text (borkb ($usedspace, NULL, 1)); html_nbsp (3); if ($path == $homedir) { html_text_bold ("Unused space: "); html_text (borkb ($userinfo["hdspace"] - $usedspace, NULL, 1)); $query4 = db_query ("SELECT name FROM phpgw_vfs WHERE owner_id = '$userinfo[username]'"); $i = db_call ("affected_rows", $query4); html_break (2); html_text_bold ("Total Files: "); html_text ($i); } ### # Show file upload boxes. Note the last argument to html (). Repeats 5 times ### html_break (2); html_form_begin ("$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 ("File"); html_table_col_end (); html_table_col_begin (); html_text_bold ("Comment"); html_table_col_end (); html_table_row_end (); html_table_row_begin (); html_table_col_begin (); html (html_form_input ("file", "file[]", NULL, 255, NULL, NULL, NULL, 1) . html_break (1, NULL, 1), 5); html_table_col_end (); html_table_col_begin (); html (html_form_input ("text", "comment[]", NULL, NULL, NULL, NULL, NULL, 1) . html_break (1, NULL, 1), 5); html_table_col_end (); html_table_row_end (); html_table_end (); html_form_input ("submit", "upload_files", "Upload files"); 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_preview) { $edit_file_decoded = string_decode ($edit_file, 1); $content = $$edit_file; html_break (1); html_text_bold ("Preview of $path/$edit_file_decoded"); 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) { $edit_file_decoded = string_decode ($edit_file, 1); $content = $$edit_file; if ($phpgw->vfs->write ($edit_file_decoded, $content)) { html_text_bold ("Saved $path/$edit_file_decoded"); html_break (2); html_link_back (); } else { html_text_error ("Could not save $path/$edit_file_decoded"); html_break (2); html_link_back (); } } /* This doesn't work just yet elseif ($edit_save_all) { for ($j = 0; $j != $numoffiles; $j++) { $fileman_decoded = string_decode ($fileman[$j], 1); $content = $$fileman[$j]; echo "fileman[$j]: $fileman[$j]
$content
"; continue; if ($phpgw->vfs->write ($fileman_decoded, $content)) { html_text_bold ("Saved $path/$fileman_decoded"); html_break (1); } else { html_text_error ("Could not save $path/$fileman_decoded"); html_break (1); } } html_break (1); } */ ### # Now we display the edit boxes and forms ### for ($j = 0; $j != $numoffiles; $j++) { $fileman_decoded = string_decode ($fileman[$j], 1); if ($content = $phpgw->vfs->read ($fileman_decoded)) { if ($edit_file) $content = $$edit_file; html_table_begin ("100%"); html_form_begin ("$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]", "$fileman[$i]"); } html_table_row_begin (); html_table_col_begin (); html_form_textarea ($fileman[$j], 35, 75, $content); html_table_col_end (); html_table_col_begin ("center"); html_form_input ("submit", "edit_preview", "Preview $fileman_decoded"); html_break (1); html_form_input ("submit", "edit_save", "Save $fileman_decoded"); // html_break (1); // html_form_input ("submit", "edit_save_all", "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") { for ($i = 0; $i != 5; $i++) { if ($file_size[$i] != 0) { ### # Check to see if the file exists in the database ### $query = db_query ("SELECT * FROM phpgw_vfs WHERE name = '$file_name[$i]' AND owner_id = '$userinfo[username]' AND directory = '$path'"); if ($fileinfo = db_fetch_array ($query)) { if ($fileinfo["mime_type"] == "Directory") { html_text_summary_error ("Cannot replace $fileinfo[name] because it is a directory"); continue; } $query = db_query ("SELECT SUM(size) FROM phpgw_vfs WHERE owner_id = '$userinfo[username]' AND name != '$file_name[$i]'"); $files = db_fetch_array ($query); $usedspace = $files[0]; if (($file_size[$i] + $usedspace) > $userinfo["hdspace"]) { html_text_summary_error ("Sorry, you do not have enough space to upload those files"); continue; } if ($fileinfo["deleteable"] != "N") { $phpgw->vfs->set_attributes ($file_name[$i], array ("owner_id" => $userinfo["username"], "modifiedby_id" => $userinfo["username"], "modified" => $now, "size" => $file_size[$i], mime_type => $file_type[$i], "deleteable" => "Y", "comment" => $comment[$i]), array (RELATIVE_ALL)); $phpgw->vfs->cp ($file[$i], "$file_name[$i]", array (RELATIVE_NONE|VFS_REAL, RELATIVE_ALL)); html_text_summary ("Replaced $disppath/$file_name[$i]", $file_size[$i]); } } else { $query = db_query ("SELECT SUM(size) FROM phpgw_vfs WHERE owner_id = '$userinfo[username]'"); $files = db_fetch_array ($query); $usedspace = $files[0]; if (($file_size[$i] + $usedspace) > $userinfo["hdspace"]) { html_text_summary_error ("Not enough space to upload $file_name[$i]", NULL, $file_size[$i]); continue; } $phpgw->vfs->cp ($file[$i], $file_name[$i], array (RELATIVE_NONE|VFS_REAL, RELATIVE_ALL)); $phpgw->vfs->set_attributes ($file_name[$i], array ("mime_type" => $file_type[$i], "comment" => $comment[$i]), array (RELATIVE_ALL)); html_text_summary ("Created $disppath/$file_name[$i]", $file_size[$i]); } } } html_break (2); html_link_back (); } ### # Handle Editing comments ### elseif ($comment_files) { while (list ($file) = each ($comment_files)) { $phpgw->vfs->set_attributes ($file, array ("comment" => $comment_files[$file])); html_text_summary ("Updated comment for $path/$file"); } html_break (2); html_link_back (); } ### # Handle Renaming Files and Directories ### elseif ($renamefiles) { while (list ($file) = each ($renamefiles)) { $file_decoded = string_decode ($file, 1); if (ereg ("/", $renamefiles[$file])) { echo $phpgw->common->error_list (array ("File names cannot contain /")); } elseif (!$phpgw->vfs->mv ($file_decoded, $renamefiles[$file])) { echo $phpgw->common->error_list (array ("Could not rename $disppath/$file_decoded to $disppath/$renamefiles[$file]")); } else { html_text_summary ("Renamed $disppath/$file_decoded to $disppath/$renamefiles[$file]"); } } html_break (2); html_link_back (); } ### # Handle Moving Files and Directories ### elseif ($move) { while (list ($num, $file) = each ($fileman)) { $file_decoded = string_decode ($file, 1); if ($phpgw->vfs->mv ($file_decoded, $todir . "/" . $file_decoded, array (RELATIVE_ALL, RELATIVE_NONE))) { $moved++; html_text_summary ("Moved $disppath/$file_decoded to $todir/$file_decoded"); } else { echo $phpgw->common->error_list (array ("Could not move $disppath/$file_decoded to $todir/$file_decoded")); } } if ($moved) { html_break (2); html_link ("$appname/index.php?path=$todir", "Go to $todir"); } html_break (2); html_link_back (); } ### # Handle Copying of Files and Directories ### elseif ($copy) { while (list ($num, $file) = each ($fileman)) { $file_decoded = string_decode ($file, 1); if ($phpgw->vfs->cp ($file_decoded, $todir . "/" . $file_decoded, array (RELATIVE_ALL, RELATIVE_NONE))) { $copied++; html_text_summary ("Copied $disppath/$file_decoded to $todir/$file_decoded"); } else { echo $phpgw->common->error_list (array ("Could not copy $disppath/$file_decoded to $todir/$file_decoded")); } } if ($copied) { html_break (2); html_link ("$appname/index.php?path=$todir", "Go to $todir"); } html_break (2); html_link_back (); } ### # Handle Deleting Files and Directories ### elseif ($delete) { $query = db_query ("SELECT name FROM phpgw_vfs WHERE owner_id = '$userinfo[username]'"); $numoffiles = db_call ("affected_rows", $query); for ($i = 0; $i != $numoffiles; $i++) { if ($fileman[$i]) { ### # There is no need to create a separate $fileman_decode variable, because it will never be passed again ### $fileman[$i] = string_decode ($fileman[$i], 1); if ($phpgw->vfs->delete ($fileman[$i])) { html_text_summary ("Deleted $disppath/$fileman[$i]", $fileinfo["size"]); } else { $phpgw->common->error_list (array ("Could not delete $disppath/$fileman[$i]")); } } } html_break (2); html_link_back (); } elseif ($newdir && $createdir) { if ($badchar = bad_chars_file ($createdir, 1)) { html_text_summary_error ("Cannot create directory $createdir   (name contains \"$badchar\")"); html_break (2); html_link_back (); html_page_close (); } if ($createdir[strlen($createdir)-1] == " " || $createdir[0] == " ") { html_text_summary_error ("Cannot create directory $createdir because it begins or ends in a space", 1); html_break (2); html_link_back (); html_page_close (); } $query = db_query ("SELECT name,mime_type FROM phpgw_vfs WHERE name = '$createdir' AND owner_id = '$userinfo[username]' AND directory = '$path'"); if ($fileinfo = db_fetch_array ($query)) { if ($fileinfo[1] != "Directory") { html_text_summary_error ("$fileinfo[0] already exists as a file"); html_break (2); html_link_back (); html_page_close (); } else { html_text_summary_error ("Directory $fileinfo[0] already exists"); html_break (2); html_link_back (); html_page_close (); } } else { $query = db_query ("SELECT SUM(size) FROM phpgw_vfs WHERE owner_id = '$userinfo[username]' AND name != '$file_name[$i]'"); $files = db_fetch_array ($query); $usedspace = $files[0]; if (($usedspace + 1024) > $userinfo["hdspace"]) { html_text_summary_error ("Sorry, you do not have enough space to create a new directory", 1); html_page_close (); } if ($phpgw->vfs->mkdir ($createdir)) { html_text_summary ("Created directory $disppath/$createdir"); html_break (2); html_link ("$appname/index.php?path=$disppath/$createdir", "Go to $disppath/$createdir"); } else echo $phpgw->common->error_list (array ("Could not create $disppath/$createdir")); } html_break (2); html_link_back (); } html_page_close (); ?>