管理 | 差分 || 新規作成 || カテゴリ一覧 | ページ一覧 | 更新履歴 | 差分履歴 || アンテナ || PUT || more≫ ≫omit
shortcut: FrontPage || WikiLab | StoreRoom/最新 | 日々の泡 | むず痒いパソコン日記/最新 || HelpPage ||[edit]
category: WikiLab/BeginnerGuidance

WikiLab/BeginnerGuidance/WalRack - WalWiki と ファイルアップCGI WalRack2 を連携させる試み。

LastModified : Sun Feb 3 11:37:35 2008
[管理]

WalWiki と ファイルアップCGI WalRack2 を連携させる試み。

WalWiki の作者 塚本牧生さんが作られた Walrus File Rack を WalWiki と連携させ、 なんとな〜く WalWiki の一部のようなフリをさせて使う試みです (ちなみに WalRack ではなく WalRack2 なのは、最初に設置するとき 2 の方が新しいと思い込んだためです)。

2003/04/01(Tue)

注意Walrus File Rack ver. 2.0.3 を元にカスタマイズしています。 バージョンによって上手く動作しないことがあります。

2005/04/18(Mon)

| WikiLab | WikiLab/BeginnerGuidance || category:WikiLab/BeginnerGuidance |

WalRack2 を設置。

[TOP↑] [管理]

header に WalRack2 へのリンクを追加。

[TOP↑] [管理]

InterWiki に file ディレクトリを登録。

[TOP↑] [管理]

WalRack のカスタマイズ。

[TOP↑] [管理]

wiki と同じ CSS を使う / WalRack2 からファイル名でページ検索する。

[TOP↑] [管理]

「なんとな〜く wiki のふり」をさせるためには、HTML 部分を書き換えて wiki.css をそのまま使うといいんじゃないかと思いました。ついでに、ファイルがどのページで呼び出されているか調べるために、wiki内をファイル名で検索するリンクをつけると、もうちょっといいんじゃないかと思いました。 一応修正を加えたものを置いておきます。

WalRack に日時を表示する。

[TOP↑] [管理]

memn0ck さんによるカズタマイズ「日付の表示」部分のみの差分。 (追加のコメント部分、多分合ってると思いますが、付け忘れを 5% くらい疑って掛かったほうがいいかも)

なお、DIGITAL-MONO に、日付で新しい順にソート、ページめくり機能のある WalRack があるので、必要な場合は探し出してみてください。 「配布するということを想定してない」とおっしゃってるので、その点留意お願いします。

# ファイルのリストアップの処理
sub file_listup {
	my %file;
	my $size;
	my $list;
	my $date;                                                         # add for date
	foreach my $path (sort(glob($directory.'/*'))) {
		next unless (-f $path);
		$size += (stat($path))[7];
		$date += (stat($path))[9];                                    # add for date
		my $filename = &jcode::euc($&) if ($path =~ /[^\/]+$/);
		my $filesize = int(((stat($path))[7] + 1023) / 1024);
# -------------------- add for date ------------------------
        my ($sec,$min,$hour,$day,$mon,$year,$wday) = localtime((stat($path))[9]);
        $year = $year + 1900;
        $mon++;
        if ($mon < 10) {
            $mon = "0$mon";
        }
        if ($day < 10) {
            $day = "0$day";
        }
        if ($hour < 10) {
            $hour = "0$hour";
        }
        if ($min < 10) {
            $min = "0$min";
        }
        if ($sec < 10) {
            $sec = "0$sec";
        }
        my $week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday];
		my $filedate = "$year-$mon-$day \($week\) $hour\:$min\:$sec";
# -------------------- end for date ------------------------
		$path = url_encode($path);
		$file{$filedate} = {'path' => $path, 'name' => $filename, 'size' => $filesize, 'date' => $filedate}; # add for date これ?
#		$file{$path} = {'path' => $path, 'name' => $filename, 'size' => $filesize};                          # del for date
	}
	$size = int(($size + 1023) / 1024) if ($size);
	$date = localtime($date) if ($date);                                                                     # add for date
	if (@_ = keys(%file)) {
		foreach (sort(@_)) {
			$list .= "\t\t\t\t<li><input type='checkbox' name='unlink' value='" . $file{$_}->{'path'} . "' /><a href='$wiki_url?mycmd=search&amp;mymsg=" . $file{$_}->{'name'} . "' title='このファイルを参照しているページを検索'> <img src='search.gif'></a> ";
			$list .= "<em><a href='" . $file{$_}->{'path'} . "'>" . $file{$_}->{'name'} ."</a></em>";
			$list .= "&nbsp;<span class=\"date\">" . $file{$_}->{'date'} . "</span>";                        # add for date
			$list .= "&nbsp;(" . $file{$_}->{'size'} . " KB)</li>\n";
		}
	} else {
		$list .= "\t\t\t\t(ファイルはありません)<br />";
	}
	return $size, $list;
}

2003/05/31(Sat)

日付のみを表示する。

[TOP↑] [管理]

修正案その1

[TOP↑] [管理]
		my $filedatetime = "$year-$mon-$day \($week\) $hour\:$min\:$sec";
		my $filedate = "$year-$mon-$day \($week\)";
# -------------------- end for date ------------------------
		$path = url_encode($path);
		$file{$filedatetime} = {'path' => $path, 'name' => $filename, 'size' => $filesize, 'date' => $filedate}; # add for date これ?

修正案その2

[TOP↑] [管理]

「# ファイルリスト生成」部以降

	$form_list = <<END_OF_LIST;
	<form action='WalRack.cgi' method='post'>
		<p class='box title'><b>Current File List</b> (Total : $size KBytes)
		<a href="WalRack.cgi?sort=date">日付順</a>
		<a href="WalRack.cgi?sort=rdate">日付逆順</a>
		<a href="WalRack.cgi?sort=size">容量順</a>
		<a href="WalRack.cgi?sort=rsize">容量逆順</a>
		<a href="WalRack.cgi">名前順</a>
		</p>
		<p class='box form'>$listdata</p>

sub file_listup の修正

# -------------------- add for date ------------------------
       my $ts = (stat($path))[9];              # AsO sort
       my ($sec,$min,$hour,$day,$mon,$year,$wday) = localtime($ts);   # AsO sort
		my $filedate = "$year-$mon-$day $hour\:$min";    # AsO 日付だけなら "$year-$mon-$day"
# -------------------- end for date ------------------------
		$path = "$directory/".url_encode($filepath);
		$file{$path} = {'path' => $path, 'name' => $filename, 'size' => $filesize, 'timestamp' => $ts, 'date' => $filedate};    # AsO 
	}
	$size = int(($size + 1023) / 1024) if ($size);
	if (@_ = keys(%file)) {
                # AsO sort start
		if($formdata{'sort'}) {
			if($formdata{'sort'} eq 'date') {
				@_ = sort{$file{$b}{timestamp} cmp $file{$a}{timestamp}}(@_);
			} elsif($formdata{'sort'} eq 'rdate') {
				@_ = sort{$file{$a}{timestamp} cmp $file{$b}{timestamp}}(@_);
			} elsif($formdata{'sort'} eq 'size') {
				@_ = sort{$file{$a}{size} <=> $file{$b}{size}}(@_);
			} elsif($formdata{'sort'} eq 'rsize') {
				@_ = sort{$file{$b}{size} <=> $file{$a}{size}}(@_);
			} else {
				@_ = sort(@_);
			}
		} else {
			@_ = sort{uc($file{$a}{name}) cmp uc($file{$b}{name})}(@_);
		}
                # AsO sort end
#		foreach (sort(@_)) {
		foreach (@_) {               # AsO sort 
			$list .= "\t\t\t\t<input type='checkbox' name='unlink' value='" . $file{$_}->{'path'} . "' />&nbsp;";
			$list .= "<a href='" . $file{$_}->{'path'} . "'><b>" . $file{$_}->{'name'} ."</b></a>";
			$list .= " (" . $file{$_}->{'size'} . " KB)";                  # AsO 順序入替
			$list .= "&nbsp; - <span class=\"date\">" . $file{$_}->{'date'} . "</span>";                        # add for date
			$list .= "<br />\n";
		}
	} else {
		$list .= "\t\t\t\t(ファイルはありません)<br />";
	}

WalRack.txt に不備を見つけた場合はお知らせください。

[TOP↑] [管理]

お名前: タイムスタンプを更新: 荷札を付ける:

ver. 2.0.5 以降の WalRack に日付表示の修正する場合。

[TOP↑] [管理]
# ファイルのリストアップの処理
sub file_listup {
my %file;
my $size;
my $list;
my $date;                                                         # add for date
foreach my $path (sort(glob($directory.'/*'))) {
	next unless (-f $path);
	$size += (stat($path))[7];
	my $filepath = substr($path, length("$directory/"));
	my $filename = &jcode::euc($filepath);
	my $filesize = int(((stat($path))[7] + 1023) / 1024);
# -------------------- add for date ------------------------

(中略)

# -------------------- end for date ------------------------
#		$path = url_encode($path);
		$path = "$directory/".url_encode($filepath);             # ファイルパスを結合

おまけ。

[TOP↑] [管理]

パスワード制限などをしたい場合。

[TOP↑] [管理]

WalRack は、

  1. 全てを許可する。
  2. アップロードをパスワードで制限する。
  3. 削除をパスワードで制限する。
  4. アップロードと削除をパスワードで制限する。

などの制限ができますが、アップロードするときに削除キーを設け、「アップロードした人だけがファイルを削除できる」というような機能はありません。 配布元のページにも、今後そのような機能を付加する予定がないことが書かれています。

もし、上記のような機能が欲しい場合は、

などに望みのものがあるかもしれません。

一応「wiki のふり仕様」に改造してみたんですが、WalRack2 ほど丁寧には作っていないので、秘匿。

InterWiki に登録したディレクトリの画像ファイルを、インラインで呼び出す。

[TOP↑] [管理]

この機能は wal4 で追加されました。必要であれば最新の WalWiki を使う事をお勧めします。

ヒント:一度に複数のファイルを送信。

[TOP↑] [管理]

複数のファイルをアップロードするための改造のヒントが WalWiki:WalRack にあります。

2002-09-02 (Mon) 02:24:59 塚本牧生 : 未検証ですが、次のようなことでできるかと思います。

「print_upload_form」サブルーチンで、「type='file' name='file'」のインプットフィールドを、name='file2'、'file3'、...のように追加する。

「file_receive」サブルーチンで、「my $filename = $formdata{'file'};」の代わりに、「my $filename = (@_);」とする。

「&file_receive() if ($formdata{'file'});」としているところを、「foreach ('file1', 'file2', ...) { &file_receive($formdata{$_}) if ($formdata{$_}); }」とする。

WalWiki:WalRack

ヒント:ファイルの更新日時を表示。

[TOP↑] [管理]

2003-05-24 (Sat) 10:52:25 塚本牧生 : file_listupサブルーチンの$file{$path} = {〜};のところでファイルの更新日時も取得させ、その少し後ろの$list .= 〜で出力データを作っている部分に更新日時も加えればできると思います。

WalWiki:WalRack

個人的な覚書。

[TOP↑] [管理]
shortcut: FrontPage || WikiLab | StoreRoom/最新 | 日々の泡 | むず痒いパソコン日記/最新 || HelpPage || [edit]
select css: default | sakura | mono | greenheck | snow | NN4.x用(多分) || LinuZau!! | VikiWiki!? || others |

管理 | 差分 || 新規作成 || カテゴリ一覧 | ページ一覧 | 更新履歴 | 差分履歴 || PUT