From 16a5602cd730cd7cb571289bc3ae46ee7675a187 Mon Sep 17 00:00:00 2001 From: moodler Date: Sun, 16 May 2004 08:52:32 +0000 Subject: [PATCH] 1. Directory Resources now support sub directories 2. Subdirectories in File Manager now display their total size --- files/index.php | 3 +- lib/moodlelib.php | 50 ++++++++++++++++++++++++---- mod/resource/details.php | 2 +- mod/resource/version.php | 2 +- mod/resource/view.php | 71 +++++++++++++++++++++++++++++++--------- version.php | 2 +- 6 files changed, 103 insertions(+), 27 deletions(-) diff --git a/files/index.php b/files/index.php index 437d36fe6136d..90910ab569cb7 100644 --- a/files/index.php +++ b/files/index.php @@ -715,13 +715,14 @@ function displaydir ($wdir) { $filename = $fullpath."/".$dir; $fileurl = rawurlencode($wdir."/".$dir); $filesafe = rawurlencode($dir); + $filesize = display_size(get_directory_size("$fullpath/$dir")); $filedate = userdate(filemtime($filename), "%d %b %Y, %I:%M %p"); echo ""; print_cell("center", ""); print_cell("left", "pixpath/f/folder.gif\" HEIGHT=16 WIDTH=16 BORDER=0 ALT=\"Folder\"> ".htmlspecialchars($dir).""); - print_cell("right", "-"); + print_cell("right", "$filesize"); print_cell("right", $filedate); print_cell("right", "$strrename"); diff --git a/lib/moodlelib.php b/lib/moodlelib.php index 2401f1c4491f8..5cb48ca31651f 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -1526,19 +1526,25 @@ function get_max_upload_sizes($sitebytes=0, $coursebytes=0, $modulebytes=0) { return $filesize; } -function get_directory_list($rootdir, $excludefile="", $descend=true, $justdirs=false) { +function get_directory_list($rootdir, $excludefile="", $descend=true, $getdirs=false, $getfiles=true) { /// Returns an array with all the filenames in /// all subdirectories, relative to the given rootdir. /// If excludefile is defined, then that file/directory is ignored -/// If justdirs is defined, then only subdirectories are listed, otherwise just files +/// If getdirs is true, then (sub)directories are included in the output +/// If getfiles is true, then files are included in the output +/// (at least one of these must be true!) $dirs = array(); - if (!is_dir($rootdir)) { + if (!$getdirs and !$getfiles) { // Nothing to show return $dirs; } - if (!$dir = opendir($rootdir)) { + if (!is_dir($rootdir)) { // Must be a directory + return $dirs; + } + + if (!$dir = opendir($rootdir)) { // Can't open it for some reason return $dirs; } @@ -1549,16 +1555,16 @@ function get_directory_list($rootdir, $excludefile="", $descend=true, $justdirs= } $fullfile = "$rootdir/$file"; if (filetype($fullfile) == "dir") { - if ($justdirs) { + if ($getdirs) { $dirs[] = $file; } if ($descend) { - $subdirs = get_directory_list($fullfile, $excludefile, $descend, $justdirs); + $subdirs = get_directory_list($fullfile, $excludefile, $descend, $getdirs, $getfiles); foreach ($subdirs as $subdir) { $dirs[] = "$file/$subdir"; } } - } else if (!$justdirs) { + } else if ($getfiles) { $dirs[] = $file; } } @@ -1569,6 +1575,36 @@ function get_directory_list($rootdir, $excludefile="", $descend=true, $justdirs= return $dirs; } +function get_directory_size($rootdir, $excludefile="") { +/// Adds up all the files in a directory and works out the size + + $size = 0; + + if (!is_dir($rootdir)) { // Must be a directory + return $dirs; + } + + if (!$dir = opendir($rootdir)) { // Can't open it for some reason + return $dirs; + } + + while (false !== ($file = readdir($dir))) { + $firstchar = substr($file, 0, 1); + if ($firstchar == "." or $file == "CVS" or $file == $excludefile) { + continue; + } + $fullfile = "$rootdir/$file"; + if (filetype($fullfile) == "dir") { + $size += get_directory_size($fullfile, $excludefile); + } else { + $size += filesize($fullfile); + } + } + closedir($dir); + + return $size; +} + function get_real_size($size=0) { /// Converts numbers like 10M into bytes if (!$size) { diff --git a/mod/resource/details.php b/mod/resource/details.php index 3a05c58619a08..a93a1a5650ea8 100644 --- a/mod/resource/details.php +++ b/mod/resource/details.php @@ -399,7 +399,7 @@ break; case DIRECTORY: - $rawdirs = get_directory_list("$CFG->dataroot/$course->id", 'moddata', true, true); + $rawdirs = get_directory_list("$CFG->dataroot/$course->id", 'moddata', true, true, false); $dirs = array(); foreach ($rawdirs as $rawdir) { $dirs[$rawdir] = $rawdir; diff --git a/mod/resource/version.php b/mod/resource/version.php index d783b541f0d95..023a4396456d2 100644 --- a/mod/resource/version.php +++ b/mod/resource/version.php @@ -6,7 +6,7 @@ //////////////////////////////////////////////////////////////////////////////// $module->version = 2004013101; -$module->requires = 2004050200; // Requires this Moodle version +$module->requires = 2004051600; // Requires this Moodle version $module->cron = 0; ?> diff --git a/mod/resource/view.php b/mod/resource/view.php index 3b3ac886569d1..37436a2b29966 100644 --- a/mod/resource/view.php +++ b/mod/resource/view.php @@ -5,6 +5,7 @@ require_variable($id); // Course Module ID optional_variable($frameset, ""); + optional_variable($subdir, ""); if (!empty($CFG->forcelogin)) { require_login(); @@ -419,8 +420,41 @@ require_once("../../files/mimetypes.php"); add_to_log($course->id, "resource", "view", "view.php?id=$cm->id", $resource->id, $cm->id); - print_header($pagetitle, "$course->fullname", "$navigation $resource->name", - "", "", true, update_module_button($cm->id, $course->id, $strresource), navmenu($course, $cm)); + + if ($resource->reference) { + $relativepath = "$course->id/$resource->reference"; + } else { + $relativepath = "$course->id"; + } + + if ($subdir) { + if (detect_munged_arguments($subdir)) { + error("The value for 'subdir' contains illegal characters!"); + } + $relativepath = "$relativepath$subdir"; + + $subs = explode('/', $subdir); + array_shift($subs); + $countsubs = count($subs); + $count = 0; + $subnav = "id\">$resource->name"; + $backsub = ''; + foreach ($subs as $sub) { + $count++; + if ($count < $countsubs) { + $backsub .= "/$sub"; + $subnav .= " -> id&subdir=$backsub\">$sub"; + } else { + $subnav .= " -> $sub"; + } + } + } else { + $subnav = $resource->name; + } + + print_header($pagetitle, "$course->fullname", "$navigation $subnav", + "", "", true, update_module_button($cm->id, $course->id, $strresource), + navmenu($course, $cm)); if (trim($resource->summary)) { print_simple_box(text_to_html($resource->summary), "center"); @@ -429,13 +463,7 @@ print_simple_box_start("center", "", "$THEME->cellcontent", '0' ); - if ($resource->reference) { - $relativepath = "$course->id/$resource->reference"; - } else { - $relativepath = "$course->id"; - } - - $files = get_directory_list("$CFG->dataroot/$relativepath", 'moddata', false); + $files = get_directory_list("$CFG->dataroot/$relativepath", 'moddata', false, true, true); $strftime = get_string('strftimedatetime'); $strname = get_string("name"); $strsize = get_string("size"); @@ -447,28 +475,39 @@ "$strmodified". ""; foreach ($files as $file) { - $icon = mimeinfo("icon", $file); + if (is_dir("$CFG->dataroot/$relativepath/$file")) { // Must be a directory + $icon = "folder.gif"; + $relativeurl = "/view.php?blah"; + $filesize = display_size(get_directory_size("$CFG->dataroot/$relativepath/$file")); - if ($CFG->slasharguments) { - $relativeurl = "/file.php/$relativepath/$file"; } else { - $relativeurl = "/file.php?file=/$relativepath/$file"; + $icon = mimeinfo("icon", $file); + + if ($CFG->slasharguments) { + $relativeurl = "/file.php/$relativepath/$file"; + } else { + $relativeurl = "/file.php?file=/$relativepath/$file"; + } + $filesize = display_size(filesize("$CFG->dataroot/$relativepath/$file")); } - $filesize = display_size(filesize("$CFG->dataroot/$course->id/$resource->reference/$file")); echo ''; echo ''; echo "pixpath/f/$icon\" width=\"16\" height=\"16\">"; echo ''; echo '

'; - link_to_popup_window($relativeurl, "resourceedirectory$resource->id", "$file", 450, 600, ''); + if ($icon == 'folder.gif') { + echo "id&subdir=$subdir/$file\">$file"; + } else { + link_to_popup_window($relativeurl, "resourceedirectory$resource->id", "$file", 450, 600, ''); + } echo '

'; echo ' '; echo '

'; echo $filesize; echo '

'; echo '

'; - echo userdate(filectime("$CFG->dataroot/$course->id/$resource->reference/$file"), $strftime); + echo userdate(filectime("$CFG->dataroot/$relativepath/$file"), $strftime); echo '

'; echo ''; } diff --git a/version.php b/version.php index 64d22588854dc..9d0f29d9c19d9 100644 --- a/version.php +++ b/version.php @@ -5,7 +5,7 @@ // database to determine whether upgrades should // be performed (see lib/db/*.php) -$version = 2004051500; // The current version is a date (YYYYMMDDXX) +$version = 2004051600; // The current version is a date (YYYYMMDDXX) $release = "1.3 Beta +"; // User-friendly version number