表紙 | 新規 | 一覧 | RSS | 検索 | 閲覧履歴 | 作成履歴 | 更新履歴

update_recent_changes関数 - YukiWikiベースのPonyWikiのソースを読んでみる その26

差分表示


[[YukiWikiベースのPonyWikiのソースを読んでみる]] その25
[[YukiWikiベースのPonyWikiのソースを読んでみる]] その26

更新履歴([[RecentChanges]])を更新する関数。

処理の流れは以下の通り

- 今回追加する行を作成する($update)
- 現在の[[RecentChanges]]を配列に読み込む
- 配列(@oldupdates)の各行毎にループを回す
-- 正規表現で、行中のページ名を取り出す。
-- そのページが存在しなければ、なにもしない
-- そのページ名とこれから更新するページ名が同じであれば、なにもしない
-- それ以外であれば、@updatesへ追加する
- 現在処理中のページが存在するならば、@updatesの先頭に$updateを追加
- &verb($database{$RecentChanges})へ@updatesを保存

---(
sub update_recent_changes {
    my $update = "- @{[&get_now]} @{[&armor_name($form{mypage})]} @{[&get_subjectline($form{mypage})]}";
    my @oldupdates = split(/\r?\n/, $database{$[[RecentChanges]]});
    my @updates;
    foreach (@oldupdates) {
        /^\- \d\d\d\d\-\d\d\-\d\d \(...\) \d\d:\d\d:\d\d (\[\[.+?\]\])/;    # date format.
        my $name = &unarmor_name($1);
        if (&is_exist_page($name) and ($name ne $form{mypage})) {
            push(@updates, $_);
        }
    }
    if (&is_exist_page($form{mypage})) {
        unshift(@updates, $update);
    }
    splice(@updates, $maxrecent + 1);
    $database{$[[RecentChanges]]} = join("\n", @updates);
    if ($file_touch) {
        open(FILE, "> $file_touch");
        print FILE localtime() . "\n";
        close(FILE);
    }
}
---)

- get_now関数
- armor_name関数
- get_subjectline関数
- unarmor_name関数
- is_exist_page関数

----
[[#trackback]]

先頭へ