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

PonyWikiの設定項目説明 - YukiWikiベースのPonyWikiのソースを読んでみる その01

差分表示


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

* お約束

まず先頭にはお約束があります。これは環境により適切なパスに書き換えましょう。

---(
#!/usr/bin/perl
---)

* Libraries

次に、使用するモジュールが列挙されています。[[YukiWiki]]ではjcode.plで文字コード変換をしていますが、PonyWikiではEncode.pmかJcode.pmで行っています。

---(
# Libraries.
use strict;
use lib qw(.);
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
use Yuki::RSS;
use Yuki::DiffText qw(difftext);
use Yuki::[[YukiWiki]]DB;
use Yuki::PluginManager;
use Jcode;
#use utf8;
#use Encode ();
#use Encode::Guess;

use HTTP::Lite;                          # Walrus add [wiki antenna]
use Walrus::Antenna;                     # Walrus add [wiki antenna]

use Fcntl;
---)

* バージョン

それからバージョンが変数に設定されています。実に簡単に日付.Bugfix番号形式にしています。

---(
# Check if the server can use 'AnyDBM_File' or not.
# eval 'use AnyDBM_File';
# my $error_AnyDBM_File = $@;
my $version = '041129.1';
my $orgversion = '2.1.2';
##############################
---)

* Trackback

この部分は[[WalWiki]]の塚本さんがWikiに書かれていたものを頂きました。&br()
Trackback関係の変数を設定しています。

---(
##############################
# Trackback config 
#
my $url_cgi_trackback = 'http://you-like.to/cgi-bin/ponytail/yukiwiki/wiki.cgi'; # add [trackback]
my $embed_trackback = '[[#trackback]]'; # add [trackback]
my $embed_rtrackback = '[[#rtrackback]]'; # add [trackback]
---)

* 各設定項目

メールアドレスやらディレクトリやらの設定項目が続きます。

---(
##############################
#
# You MUST modify following '$modifier_...' variables.
#
my $modifier_mail = 'ponytail@you-like.to'; # Your mail address.
my $modifier_url = 'http://you-like.to/ponytail/'; # Your web page.
my $modifier_name = 'Kisara'; # Your name.
my $modifier_dir_data = '.'; # Your data directory (not URL, but DIRECTORY).
my $modifier_url_data = '.'; # Your data URL (not DIRECTORY, but URL).
my $modifier_rss_title = "Ponytail Diary";
my $modifier_rss_link = 'http://you-like.to/cgi-bin/ponytail/yukiwiki/wiki.cgi';
my $modifier_rss_description = 'Ponytail Diary';
my $modifier_rss_timezone = '+09:00';
---)

---(
##############################
#
# You MAY modify following variables.
#
my $modifier_dbtype = '[[YukiWiki]]DB';
my $modifier_sendmail = '';
# my $modifier_sendmail = '/usr/sbin/sendmail -t -n';
my $modifier_dir_plugin = './plugin';
---)

DirectoryIndexにwiki.cgiを指定できる場合は、$url_cgiを空にして$action_urlに「?」を指定すると、検索エンジンからは通常のファイルの様に見えるのでヒット率が上がる(かも)。

それ以外の環境では$url_cgi = 'wiki.cgi'; $action_url = $url_cgi;とすればOKです。

---(
##############################
#
# You MAY modify following variables.
#
my $file_touch = "$modifier_dir_data/touched.txt";
my $file_resource = "$modifier_dir_data/resource.txt";
my $file_FrontPage = "$modifier_dir_data/frontpage.txt";
my $file_conflict = "$modifier_dir_data/conflict.txt";
my $file_format = "$modifier_dir_data/format.txt";
my $url_cgi = 'wiki.cgi';
my $url_cgi = '';
my $action_url = '?';
my $url_stylesheet = "/ponytail/wiki.css";
my $icontag = qq(<img src="./wiki.gif" alt="*" width="40" height="40" />);
my $maxrecent = 50;
my $cols = 80;
my $rows = 20;
---)

ここの「&verb(my $use_FixedFrontPage = 1;)」を0に変えると、FrontPageも誰でも編集できるようになります。

---(
##############################
#
# You MAY modify following variables.
# 
my $dataname = "$modifier_dir_data/wiki";
my $infoname = "$modifier_dir_data/info";
my $diffname = "$modifier_dir_data/diff";
my $antennaname = "$modifier_dir_data/antenna";             # Walrus add [wiki antenna]
my $editchar = '?';
my $subject_delimiter = ' - ';
my $use_autoimg = 1; # automatically convert image URL into <img> tag.
my $use_exists = 0; # If you can use 'exists' method for your DB.
my $use_FixedFrontPage = 1;
---)

* システムが提供するページ名

この辺りは、システムが用意している各ページ名を設定しています。&br()

---(
##############################
my $[[RecentCreates]] = '[[RecentCreates]]';
my $[[RecentChanges]] = '[[RecentChanges]]';
my $AdminChangePassword = 'AdminChangePassword';
my $CompletedSuccessfully = 'CompletedSuccessfully';
my $FrontPage = 'FrontPage';
my $IndexPage = 'IndexPage';
my $SearchPage = 'SearchPage';
my $CreatePage = 'CreatePage';
my $ErrorPage = 'ErrorPage';
my $RssPage = 'RssPage';
my $AdminSpecialPage = 'Admin Special Page'; # must include spaces.
---)

* [[WikiName]]等の正規表現

ここでは[[WikiName]]やブラケットネームを正規表現で設定しています。&br()
[[YukiWiki]]ではアルファベットでのみ構成された文字列と、日本語で構成された文字を区別していますが、PonyWikiでは同じものとして扱っています。

---(
##############################
my $wiki_name = '\[\[(\S+?)\]\]';
	#my $wiki_name = '\b([A-Z][a-z]+([A-Z][a-z]+)+)\b';
my $bracket_name = '\[\[(.+?)\]\]';
	#my $bracket_name = '\[\[(\S+?)\]\]';
my $embedded_name = '\[\[(#\S+?)\]\]';
# Sorry for wierd regex.
my $inline_plugin = '\&amp;(\w+)\((([^()]*(\([^()]*\))?)*)\)';
---)

* コメント機能

コメント機能の設定です。[[YukiWiki]]では&verb([[[[#comment]]]])とするとコメント入力欄が表示されます。

---(
##############################
my $embed_comment = '[[#comment]]';
my $embed_rcomment = '[[#rcomment]]';
---)

各種変数の設定が続きます。

---(
##############################
my $info_ConflictChecker = 'ConflictChecker';
my $info_LastModified = 'LastModified';
my $info_IsFrozen = 'IsFrozen';
my $info_AdminPassword = 'AdminPassword';
##############################
---)

* 文字コードとページの編集可否

文字コードの設定や、システムが提供する各ページが編集可能かどうかのハッシュを作っています。前述の&verb($use_FixedFrontPage)がここで参照されています。

---(
##############################
my $kanjicode = 'euc';
my $charset = 'EUC-JP';
my $lang = 'ja';
my %fixedpage = (
    $IndexPage => 1,
    $CreatePage => 1,
    $ErrorPage => 1,
    $RssPage => 1,
    $[[RecentChanges]] => 1,
    $[[RecentCreates]] => 1,
    $SearchPage => 1,
    $AdminChangePassword => 1,
    $CompletedSuccessfully => 1,
    $FrontPage => $use_FixedFrontPage,
);
---)

* 各種ハッシュ

各種DBへtieされるハッシュが準備されます。&br()
ちなみに、各ハッシュの役割は以下の通り。
- %database
-- ページの名前をキーに、内容が値として保存される
- %infobase
-- ページの名前をキーに、以下の属性が保存されている
--- 変更時刻 (最後に"タイムスタンプを更新"された日時)
--- "最後に書き込まれた時間"
--- 編集可能かどうか(凍結されているかどうか)
- %diffbase
-- 前回と現在の内容の差分
- %resource
-- メッセージ (メニューやボタン類の文字列等)
- %antennabase
-- Antennaプラグインが呼び出す関数が使用して補足先URLの管理を行っている

---(
my %form;
my %database;
my %infobase;
my %diffbase;
my %resource;
my %antennabase;                                            # Walrus add [wiki antenna]
my $plugin_manager;
my $plugin_context = {
    debug => 0,
    database => \%database,
    infobase => \%infobase,
    resource => \%resource,
    form => \%form,
    url_cgi => $url_cgi,
};
---)

* システム提供ページの名前付け

ページ一覧とか、あの辺を変数に設定しています。

---(
my %page_command = (
    $IndexPage => 'index',
    $SearchPage => 'searchform',
    $CreatePage => 'create',
    $RssPage => 'rss',
    $AdminChangePassword => 'adminchangepasswordform',
    $FrontPage => 'FrontPage',
);
---)

* CGIの引数と関数の関連付け

ブラウザから渡される引数と実際に処理を行う関数を対応付けています。&br()
例えば、editの所は本来&verb(\&do_edit)が呼ばれるのですが、この日記では私だけが編集できればいいので&verb(\&do_adminedit)を呼ぶようにしています。&verb(\&do_adminedit)は書き込み時にパスワードが必要なフォームです。

---(
my %command_do = (
    read => \&do_read,
    edit => \&do_edit,
    adminedit => \&do_adminedit,
    adminchangepasswordform => \&do_adminchangepasswordform,
    adminchangepassword => \&do_adminchangepassword,
    write => \&do_write,
    index => \&do_index,
    searchform => \&do_searchform,
    search => \&do_search,
    create => \&do_create,
    createresult => \&do_createresult,
    FrontPage => \&do_FrontPage,
    comment => \&do_comment,
    rss => \&do_rss,
    diff => \&do_diff,
);
---)

-----
[[#rtrackback]]

先頭へ