# Wiki

Wiki API

## new

コンストラクタ

## add_user

ユーザを追加します

     $wiki->add_user(ID,パスワード,ユーザタイプ);

ユーザタイプには管理者ユーザの場合0、一般ユーザの場合1を指定します。 なお、このメソッドは実行時にWiki.pmにユーザを追加するためのもので、 このメソッドに対してユーザを追加しても永続化は行われません。

## user_exists

ユーザが存在するかどうかを確認します

## get_login_info

ログイン情報を取得します。 ログインしている場合はログイン情報を含んだハッシュリファレンスを、 ログインしていない場合はundefを返します。

     my $info = $wiki->get_login_info();
     if(defined($info)){          # ログインしていない場合はundef
       my $id   = $info->{id};    # ログインユーザのID
       my $type = $info->{type};  # ログインユーザの種別(0:管理者 1:一般)
     }

## login_check

ログインチェックを行います。

## add_editform_plugin

エディットフォームプラグインを追加します

     $wiki->add_editform_plugin(エディットフォームプラグインのクラス名,優先度);

優先度が大きいほど上位に表示されます。

## get_editform_plugin

編集フォーム用のプラグインの出力を取得します

## add_admin_menu

管理者用のメニューを追加します。管理者ユーザがログインした場合に表示されます。 優先度が高いほど上のほうに表示されます。

     $wiki->add_admin_menu(メニュー項目名,遷移するURL,優先度,詳細説明);

## add_user_menu

ログインユーザ用のメニューを追加します。 ユーザがログインした場合に表示されます。管理者ユーザの場合も表示されます。 優先度が高いほど上のほうに表示されます。

     $wiki->add_admin_menu(メニュー項目名,遷移するURL,優先度,詳細説明);

## get_admin_menu

管理者用のメニューを取得します。

## install_plugin

プラグインをインストールします。このメソッドはwiki.cgiによってcallされます。 プラグイン開発において通常、このメソッドを使用することはありません。

## is_installed

プラグインがインストールされているかどうかを調べます。

## add_menu

メニュー項目を追加します。既に同じ名前の項目が登録されている場合は上書きします。 優先度が高いほど左側に表示されます。

     $wiki->add_menu(項目名,URL,優先度,クロールを拒否するかどうか);

検索エンジンにクロールさせたくない場合は第4引数に1、許可する場合は0を指定します。 省略した場合はクロールを許可します。

## add_hook

フックプラグインを登録します。登録したプラグインはdo_hookメソッドで呼び出します。

     $wiki->add_hook(フック名,フックプラグインのクラス名);

## do_hook

add_hookメソッドで登録されたフックプラグインを実行します。 引数にはフックの名前に加えて任意のパラメータを渡すことができます。 これらのパラメータは呼び出されるクラスのhookメソッドの引数として渡されます。

     $wiki->do_hook(フック名[,引数1[,引数2...]]);

## add_handler

アクションハンドラプラグインを追加します。 リクエスト時にactionというパラメータが一致するアクションが呼び出されます。

     $wiki->add_handler(actionパラメータ,アクションハンドラのクラス名);

## add_user_handler

ログインユーザ用のアクションハンドラを追加します。 このメソッドによって追加されたアクションハンドラはログインしている場合のみ実行可能です。 それ以外の場合はエラーメッセージを表示します。

     $wiki->add_user_handler(actionパラメータ,アクションハンドラのクラス名);

## add_admin_handler

管理者用のアクションハンドラを追加します。 このメソッドによって追加されたアクションハンドラは管理者としてログインしている場合のみ実行可能です。 それ以外の場合はエラーメッセージを表示します。

     $wiki->add_admin_handler(actionパラメータ,アクションハンドラのクラス名);

## add_plugin

インラインプラグインを追加します。

このメソッドは3.4系との互換性を維持するために残しました。3.6で廃止するものとします。

## add_inline_plugin

インラインプラグインを登録します。プラグインの出力タイプには"WIKI"または"HTML"を指定します。 省略した場合は"HTML"を指定したものとみなされます。

     $wiki->add_inline_plugin(プラグイン名,プラグインのクラス名,プラグインの出力タイプ);

## add_paragraph_plugin

パラグラフプラグインを登録します。プラグインの出力タイプには"WIKI"または"HTML"を指定します。 省略した場合は"HTML"を指定したものとみなされます。

     $wiki->add_inline_plugin(プラグイン名,プラグインのクラス名,プラグインの出力タイプ);

## add_block_plugin

ブロックプラグインを登録します。プラグインの出力タイプには"WIKI"または"HTML"を指定します。 省略した場合は"HTML"を指定したものとみなされます。

     $wiki->add_block_plugin(プラグイン名,プラグインのクラス名,プラグインの出力タイプ);

## get_plugin_info

プラグインの情報を取得します

     my $info = $wiki->get_plugin_info("include");
     my $class  = $info->{CLASS};  # プラグインのクラス名
     my $type   = $info->{TYPE};   # inline、paragraph、blockのいずれか
     my $format = $info->{FORMAT}; # HTMLまたはWIKI

## call_handler

add_handlerメソッドで登録されたアクションハンドラを実行します。 アクションハンドラのdo_actionメソッドの戻り値を返します。

     my $content = $wiki->call_handler(actionパラメータ);

## process_wiki

引数で渡したWikiフォーマットの文字列をHTMLに変換して返します。

     my $html = $wiki->process_wiki(文字列);

## process_plugin

インラインプラグイン、パラグラフプラグインの呼び出し（内部処理用の関数）。 初期のメソッドのため命名規則（privateメソッドのメソッド名は_から始める） に従っていません。

## get_current_parser

パース中の場合、現在有効なWiki::Parserのインスタンスを返却します。 パース中の内容をプラグインから変更したい場合に使用します。

## error

エラーの場合、呼び出します。 アクションハンドラからエラーを報告する際に使用してください。

     sub do_action {
       my $self = shift;
       my $wiki = shift;
       ...
       return $wiki->error(エラーメッセージ);
         or
       return $wiki->error(エラーコード, エラーメッセージ);
     }

## get_plugin_instance

プラグインのインスタンスを取得します。Wiki.pmで内部的に使用されるメソッドです。 プラグイン開発において通常、このメソッドを使用する必要はありません。

## parse_inline_plugin

インラインプラグインをパースしてコマンドと引数に分割します。

## add_format_plugin

フォーマットプラグインを追加します。 フォーマットプラグインはconvert_to_fswikiメソッドとconvert_from_fswikiメソッドを 実装したクラスでなくてはなりません。

     $wiki->add_format_plugin(文法名,クラス名);

## get_format_names

インストールされているフォーマットプラグインの一覧を取得します。

     my @formats = $wiki->get_format_names();

## convert_to_fswiki

各Wiki書式で記述したソースをFSWikiの書式に変換します。

     $source = $wiki->convert_to_fswiki($source,"YukiWiki");

インライン書式のみ変換を行う場合は第三引数に1を渡します。

     $source = $wiki->convert_to_fswiki($source,"YukiWiki",1);

## convert_from_fswiki

FSWikiの書式で記述したソースを各Wikiの書式に変換します。

     $source = $wiki->convert_from_fswiki($source,"YukiWiki");

インライン書式のみ変換を行う場合は第三引数に1を渡します。

     $source = $wiki->convert_from_fswiki($source,"YukiWiki",1);

## get_edit_format

現在のユーザが編集に使用するフォーマットを取得します。 formatプラグインがアクティベートされていない場合は常に"FSWiki"を返します。

     my $format = $wiki->get_edit_format();

## add_head_info

headタグ内に出力する情報を追加します。 ただしサイトテンプレートが対応している必要があります。

     $wiki->add_head_info("");

## freeze_page

ページを凍結します

     $wiki->freeze_page(ページ名);

## un_freeze_page

ページの凍結を解除します

     $wiki->un_freeze_page(ページ名);

## get_freeze_list

凍結されているページのリストを取得します。

## is_freeze

引数で渡したページが凍結中かどうかしらべます

     if($wiki->is_freeze(ページ名)){
       ...
     }

## can_modify_page

引数で渡したページが編集可能かどうかを調べます。 編集不可モード（setup.plで$accept_editが0に設定されている場合）はログインしていれば編集可能、 ページが凍結されている場合は管理者ユーザでログインしている場合に編集可能となります。

     if($wiki->can_modify_page(ページ名)){
       ...
     }

## set_page_level

ページの参照レベルを設定します。

- 0 - 全員に公開
- 1 - ユーザに公開
- 2 - 管理者に公開

     $wiki->set_page_level(ページ名,公開レベル);

## get_page_level

ページの参照レベルを取得します。 ページ名が指定されていない場合、全てのページの参照レベルを ハッシュリファレンスで返します。

- 0 - 全員に公開
- 1 - ユーザに公開
- 2 - 管理者に公開

     my $level = $get_page_level(ページ名);

## can_show

ページが参照可能かどうかを取得します。

     if($wiki->can_show(ページ名)){
       # 参照可能
     } else {
       # 参照不可能
     }

## create_page_url

ページにジャンプするためのURLを生成するユーティリティメソッドです。 引数としてページ名を渡します。

     $wiki->create_page_url("FrontPage");

上記のコードは通常、以下のURLを生成します。

     wiki.cgi?page=FrontPage

## create_url

任意のURLを生成するためのユーティリティメソッドです。 引数としてパラメータのハッシュリファレンスを渡します。

     $wiki->create_url({action=>HOGE,type=>1});

上記のコードは通常、以下のURLを生成します。

     wiki.cgi?action=HOGE&type=1

## set_title

アクションハンドラ中でタイトルを設定する場合に使用します。

     $wiki->set_title(タイトル[,編集系のページがどうか]);

編集系の画面の場合、第二引数に1を指定してください。 ロボット対策用に以下のMETAタグが出力されます。

     <meta name="ROBOTS" content="NOINDEX, NOFOLLOW">

## get_title

タイトルを取得します。

## get_page_list

ページの一覧を取得します。 引数としてハッシュリファレンスを渡すことで取得内容を指定することが可能。 デフォルトでは全てのページを名前でソートしたリストを返却する。

以下の例は参照権のあるページのみ取得し、更新日時でソートする。

     my @list = $wiki->get_page_list({-sort   => 'last_modified',
                                      -permit => 'show'});

以下の例は全てのページを取得し、名前でソートする。

     my @list = $wiki->get_page_list({-sort => 'name'});

以下の例は最新の10件を取得する。

     my @list = $wiki->get_page_list({-sort=>'last_modified',-max=>10});

## get_last_modified

ページの物理的な（データファイルの更新日時）最終更新時刻を取得します。

     my $modified = $wiki->get_last_modified(ページ名);

## get_last_modified2

ページ論理的な最終更新時刻を取得します。 「タイムスタンプを更新しない」にチェックを入れてページを保存した場合は このメソッドで返される日時は保存前のものになります。

     my $modified = $wiki->get_last_modified2(ページ名);

## get_page

ページのソースを取得します。

第三引数にフォーマット名を渡した場合のみ、フォーマットプラグインによる ソースの変換を行います。それ以外の場合は必要に応じてプラグイン側で Wiki::convert_from_fswikiメソッドを呼んで変換を行います。

## get_backup

バックアップされたソースを取得します。バックアップが存在しない場合は空文字列を返します。 世代バックアップに対応したストレージを使用している場合は第二引数に取得する世代を指定することができます。

     # 世代バックアップを使用していない場合
     my $backup = $wiki->get_backup(ページ名);
     # 世代バックアップを使用している場合
     my $backup = $wiki->get_backup(ページ名,世代);

世代は古いものから順に0〜の数値で指定します。

## save_page

ページを保存します。

     $wiki->save_page(ページ名,ページ内容);

フォーマットプラグインによるフォーマットの変換は行われません。 つまり、フォーマットプラグインを使用している場合、このメソッドに渡す Wikiソースは事前にFSWiki形式に変換されたソースでなければなりません。

保存時にタイムスタンプを更新しない場合、第三引数に1を渡します。

     $wiki->save_page(ページ名,ページ内容,1);

## page_exists

ページが存在するかどうか調べます。

     if($wiki->page_exists(ページ名)){
       # ページが存在する場合の処理
     } else {
       # ページが存在しない場合の処理
     }

## get_CGI

CGIオブジェクトを取得

     my $cgi = $wiki->get_CGI;

## redirect

引数で渡したページにリダイレクトします。 ページの保存後にページを再表示する場合はこのメソッドを使用して下さい。 なお、このメソッドを呼び出すとそこでスクリプトの実行は終了し、呼び出し元に制御は戻りません。

     $wiki->redirect("FrontPage");

第二引数にパート番号を渡すとそのパートにリダイレクトします。

     $wiki->redirect("FrontPage", 1);

## redirectURL

指定のURLにリダイレクトします。 このメソッドを呼び出すとそこでスクリプトの実行は終了し、呼び出し元に制御は戻りません。

     $wiki->redirectURL(リダイレクトするURL);

## config

グローバル設定を取得もしくは変更します

     # データファイルを格納するディレクトリ
     my $data_dir = $wiki->config('data_dir');
     # 設定を$data_dirで上書き
     $wiki->config('data_dir',$data_dir);

## farm_is_enable

Farm機能が有効になっているかどうかを取得します

     if($wiki->farm_is_enable()){
       # Farmが有効になっているときの処理
     } else {
       # Farmが無効になっているときの処理
     }

## create_wiki

子Wikiを作成します。引数にはWikiの名前、作成するWikiサイトの管理者ID、パスワードを渡します。 このメソッド内ではWikiサイト名のバリデーションや重複チェックは行われません。 事前に行う必要があります。このメソッドはfarmプラグインを使用している場合のみ使用可能です。

     $wiki->create_wiki(Wikiサイト名,管理者ID,パスワード);

## remove_wiki

子Wikiを削除します。引数には削除するWikiサイトのパス（PATH_INFO部分）を渡します。 このメソッドはfarmプラグインを使用している場合のみ使用可能です。

     $wiki->remove_wiki(Wikiサイトのパス);

## wiki_exists

引数で渡した名称の子Wikiが存在するかどうかを調べます。 このメソッドはfarmプラグインを使用している場合のみ使用可能です。

     $wiki->wiki_exists(Wikiサイト名);

## get_wiki_list

子Wikiを配列で取得します。孫Wiki、曾孫Wikiは配列のリファレンスとして格納されています。

## search_child

子Wikiのツリーを配列で取得します。 ネストしたWikiは配列リファレンスで格納します。