[サイト管理]-[ファイル]および"ファイル編集"のフォルダ内一覧表示
(1) files/index.php: 25行近辺,パラメータを取得する箇所.
$id = required_param('id', PARAM_INT);
$file = optional_param('file', '', PARAM_PATH);
$wdir = optional_param('wdir', '', PARAM_PATH);
$action = optional_param('action', '', PARAM_ACTION);
$name = optional_param('name', '', PARAM_FILE);
$oldname = optional_param('oldname', '', PARAM_FILE);
$choose = optional_param('choose', '', PARAM_FILE); //in fact it is always 'formname.inputname'
$userfile= optional_param('userfile','',PARAM_FILE);
$save = optional_param('save', 0, PARAM_BOOL);
$text = optional_param('text', '', PARAM_RAW);
$confirm = optional_param('confirm', 0, PARAM_BOOL);
// ここから追加
$sortorderfilelist = optional_param('sortorderfilelist', 0, PARAM_INT);
if ($sortorderfilelist < 1) {
if (isset($_SESSION['sortorderfilelist'])) $sortorderfilelist = $_SESSION['sortorderfilelist'];
else $sortorderfilelist = 1;
} else $_SESSION['sortorderfilelist'] = $sortorderfilelist;
// ここまで追加
if ($choose) {
if (count(explode('.', $choose)) > 2) {
error('Incorrect format for choose parameter');
}
}
(2)files/index.php: function displaydir(), 811行近辺
function displaydir ($wdir) {
// $wdir == / or /a or /a/b/c/d etc
global $basedir;
global $id;
global $USER, $CFG;
global $choose;
global $sortorderfilelist; // (追加)
$fullpath = $basedir.$wdir;
$dirlist = array();
$directory = opendir($fullpath); // Find all files
while (false !== ($file = readdir($directory))) {
if ($file == "." || $file == "..") {
continue;
}
if (is_dir($fullpath."/".$file)) {
// 以下3行をコメントアウト
// $dirlist[] = $file;
// } else {
// $filelist[] = $file;
// ここから追加
switch ($sortorderfilelist) {
case 3: case 4:
$sortkeystr = strftime('%Y%m%d%H%M%S', fs_filemtime("$fullpath/$file"));
break;
case 5: case 6:
$sortkeystr = strval(get_directory_size("$fullpath/$file"));
break;
case 1: case 2: default:
$sortkeystr = $file;
break;
}
$dirlist['0'.$file] = $sortkeystr;
// $dirlist["0"]が$dirlist[0]になってしまうため'0'を付けて$dirlist["00"]とする.
} else {
switch ($sortorderfilelist) {
case 3: case 4:
$sortkeystr = strftime('%Y%m%d%H%M%S', fs_filemtime("$fullpath/$file"));
break;
case 5: case 6:
$sortkeystr = strval(fs_filesize("$fullpath/$file"));
break;
default:
$sortkeystr = $file; break;
}
$filelist['0'.$file] = $sortkeystr;
// $filelist["0"]が$filelist[0]になってしまうため'0'を付けて$filelist["00"]とする.
// ここまで追加
}
}
closedir($directory);
$strname = get_string("name");
$strsize = get_string("size");
(途中省略)
$strrename = get_string("rename");
$stredit = get_string("edit");
$strunzip = get_string("unzip");
$strlist = get_string("list");
$strrestore= get_string("restore");
$strchoose = get_string("choose");
$strfolder = get_string("folder");
$strfile = get_string("file");
// ここから追加
$reloadurl = "<a href=\"index.php?id=$id&wdir=$wdir&choose=$choose&";
$strname .= " (";
$strname .= $sortorderfilelist == 1 ? "▲/" : $reloadurl."sortorderfilelist=1\">▲</a>/";
$strname .= $sortorderfilelist == 2 ? "▼)" : $reloadurl."sortorderfilelist=2\">▼</a>)";
$strmodified .= " (";
$strmodified .= $sortorderfilelist == 3 ? "▲/" : $reloadurl."sortorderfilelist=3\">▲</a>/";
$strmodified .= $sortorderfilelist == 4 ? "▼)" : $reloadurl."sortorderfilelist=4\">▼</a>)";
$strsize .= " (";
$strsize .= $sortorderfilelist == 5 ? "▲/" : $reloadurl."sortorderfilelist=5\">▲</a>/";
$strsize .= $sortorderfilelist == 6 ? "▼)" : $reloadurl."sortorderfilelist=6\">▼</a>)";
// ここまで追加
echo "<form action=\"index.php\" method=\"post\" id=\"dirform\">";
echo "<div>";
echo '<input type="hidden" name="choose" value="'.$choose.'" />';
// echo "<hr align=\"center\" noshade=\"noshade\" size=\"1\" />";
echo "<hr/>";
echo "<table border=\"0\" cellspacing=\"2\" cellpadding=\"2\" width=\"640\" class=\"files\">";
echo "<tr>";
echo "<th class=\"header\" scope=\"col\"></th>";
echo "<th class=\"header name\" scope=\"col\">$strname</th>";
echo "<th class=\"header size\" scope=\"col\">$strsize</th>";
echo "<th class=\"header date\" scope=\"col\">$strmodified</th>";
echo "<th class=\"header commands\" scope=\"col\">$straction</th>";
echo "</tr>\n";
if ($wdir != "/") {
$dirlist[] = '..';
}
$count = 0;
if (!empty($dirlist)) {
// 以下2行をコメントアウト
// asort($dirlist);
// foreach ($dirlist as $dir) {
// ここから追加
switch ($sortorderfilelist) {
case 2: case 4: case 6: arsort($dirlist); break;
case 3: case 5: default: asort($dirlist); break;
}
foreach ($dirlist as $key => $value) {
if ($value == '..') {
unset($dirlist[$key]);
$dirlist = array('0..'=>'..') + $dirlist;
}
}
foreach ($dirlist as $dir => $dummy) {
$dir = substr($dir, 1); // 頭のダミーの'0'を取り除く
// ここまで追加
echo "<tr class=\"folder\">";
if ($dir == '..') {
$fileurl = rawurlencode(dirname($wdir));
print_cell();
// alt attribute intentionally empty to prevent repetition in screen reader
print_cell('left', '<a href="index.php?id='.$id.'&wdir='.$fileurl.'&choose='.$choose.'"><img src="'.$CFG->pixpath.'/f/parent.gif" class="icon" alt="" /> '.get_string('parentfolder').'</a>', 'name');
print_cell();
print_cell();
print_cell();
} else {
$count++;
$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");
// $filedate = userdate(filemtime($filename), ""); // タイムスタンプを年月日で表示したい場合はこちらをどうぞ
print_cell("center", "<input type=\"checkbox\" name=\"file$count\" value=\"$fileurl\" />", 'checkbox');
print_cell("left", "<a href=\"index.php?id=$id&wdir=$fileurl&choose=$choose\"><img src=\"$CFG->pixpath/f/folder.gif\" class=\"icon\" alt=\"$strfolder\" /> ".htmlspecialchars($dir)."</a>", 'name');
print_cell("right", $filesize, 'size');
print_cell("right", $filedate, 'date');
// ここから追加 (これはソーティングではなく,リソース/ディレクトリの表示 でディレクトリをプルダウンリストではなくファイル編集画面から選択できるようにするための修正)
if ($choose == 'id_reference2_value') {
$selectdir = trim($fileurl, "/");
$edittext = "<strong><a Xonclick=\"return set_value('".rawurldecode($selectdir)."')\" href=\"#\">$strchoose</a></strong> ";
} else $edittext = '';
// ここまで追加
// print_cell("right", "<a href=\"index.php?id=$id&wdir=$wdir&file=$filesafe&action=rename&choose=$choose\">$strrename</a>", 'commands');
print_cell("right", "$edittext <a href=\"index.php?id=$id&wdir=".rawurlencode($wdir)."&file=$filesafe&action=rename&choose=$choose\">$strrename</a>", 'commands'); // $wdirをrawurlencode()しているのは本件と別件.IE対策です.$edittextを追加しているのは上述の通り.
}
echo "</tr>";
}
}
if (!empty($filelist)) {
// 以下2行をコメントアウト
// asort($filelist);
// foreach ($filelist as $file) {
// ここから追加
switch ($sortorderfilelist) {
case 2: case 4: case 6: arsort($filelist); break;
case 3: case 5: default: asort($filelist); break;
}
foreach ($filelist as $file => $dummy) {
$file = substr($file, 1); // 頭のダミーの'0'を取り除く
// ここまで追加
$icon = mimeinfo("icon", $file);
以上で良いはずです.
別件(リソースの追加/ディレクトリの表示のフォルダの選択をプルダウンリストだけではなく,ファイル編集画面を使って選択できるようにする拡張)なども混ざっているため見づらいですね.スミマセン.赤い文字のところが本件です.