トップ 新規 一覧 検索 ヘルプ RSS ログイン

AdminTemplateの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!概要
このモジュールは幾つかのメンバ変数によりデータ構造を定義しHTML::Templateによ
るフォームを作成するだけで、環境設定のような設定値の保存ができるadmin_menuの
アクションハンドラが作れるベースクラスです。
!!例
!plugin/foo/Admin.pm
 package plugin::foo::Admin;
!plugin/hoge/Admin.pm
 package plugin::hoge::Admin;
 use Wiki::AdminTemplate;
 use vars qw(@ISA);
 @ISA = qw(Wiki::AdminTemplate);
 sub new {
         my $class = shift;
         my $self = new Wiki::AdminTemplate('foo');
         $self->{config_template} = {
                 email   => '^(\w+@[\w.]+)$',
                 limit   => '^(\d+)$',
                 type    => ["admin", "user", "guest"],
         };
         my $self = new Wiki::AdminTemplate('hoge');
         $self->{default_value} = {
                 email   => "foo@example.com",
                 limit   => "20",
                 type    => "admin",
                 name    => "hoge",
                 value   => "10",
                 kind    => "alpha",
         };
         $self->{config_template} = {
                 name    => '^\w+$',
                 value   => '^\d*$',
                 kind    => ["alpha", "beta"],
         };
         return bless $self,$class;
 }
 1;
!plugin::foo::Install.pm
 package plugin::foo::Install;
!plugin::hoge::Install.pm
 package plugin::hoge::Install;
 sub install {
         my $wiki = shift;
         $wiki->add_admin_menu(
                 "foo",
                 $wiki->config('script_name')."?action=ADMINFOO",
                 "hoge",
                 $wiki->config('script_name')."?action=ADMINHOGE",
                 200,
                 "AdminTemplateTest",
         );
         $wiki->add_admin_handler('ADMINFOO',"plugin::foo::Admin");
         $wiki->add_admin_handler('ADMINHOGE',"plugin::hoge::Admin");
 }
 1;
!tmpl/foo.tmpl
 <h2>fooプラグインサンプル設定</h2>
!tmpl/hoge.tmpl
 <h2>hogeプラグインサンプル設定</h2>
 <h3>名前</h3>
 <p><input type="text" name="name" size="40"
           value="<!--TMPL_VAR NAME="NAME" ESCAPE="HTML"-->"></p>
 <h3>閾値</h3>
 <p><input type="text" name="limit" size="4"
           value="<!--TMPL_VAR NAME="LIMIT" ESCAPE="HTML"-->"></p>
 <h3>メールアドレス</h3>
 <p><input type="text" name="email" size="40"
           value="<!--TMPL_VAR NAME="EMAIL" ESCAPE="HTML"-->"></p>
 <p><input type="text" name="value" size="4"
           value="<!--TMPL_VAR NAME="VALUE" ESCAPE="HTML"-->"></p>
 <h3>分類</h3>
 <p>
   <input type="radio" name="type" value="admin" id="type_admin"
   <input type="radio" name="kind" value="alpha" id="kind_alpha"
          <!--TMPL_IF NAME="TYPE_ADMIN"-->checked<!--/TMPL_IF-->>
   <label for="type_admin">admin</label>
   <input type="radio" name="type" value="user" id="type_user"
   <label for="kind_alpha">alpha</label>
   <input type="radio" name="kind" value="beta" id="kind_beta"
          <!--TMPL_IF NAME="TYPE_USER"-->checked<!--/TMPL_IF-->>
   <label for="type_user">user</label>
   <input type="radio" name="type" value="guest" id="type_guest"
          <!--TMPL_IF NAME="TYPE_GUEST"-->checked<!--/TMPL_IF-->>
   <label for="type_guest">guest</label>
   <label for="kind_beta">beta</label>
 </p>
 <p>
   <input type="submit" name="SAVE" value="保存">
   <input type="reset" value="リセット">
 </p>

!!詳細
このクラスを継承し、コンストラクタで幾つかのメンバ変数を初期化します。
初期化が必要なメンバ変数はHTML::Templateファイルや値を保存する設定ファイル名
のほか、データ構造を表すハッシュ変数、初期値を保持するハッシュ変数等がありま
す。

ベースクラスのメソッドはそれらのメンバ変数にしたがって動作し、admin_menu用の
オブジェクトとして使用できます。

具体的には、
* 設定ファイル読み込みとHTML::Template変数への反映
* 設定ファイルまたはPOSTされたデータの正当性チェックと設定ファイルへの反映
を行ないます。
このため、このクラスを継承し、メンバ変数の初期化を行なうコンストラクタと
HTML::Template用のファイルを作れば環境設定機能を加わえる事ができます。

コンストラクタでは、ベースクラスのコンストラクタにプラグイン名を渡して呼び出
す事で、そのプラグイン名の名前を元にページタイトルや主要ファイルの名前が設定
できます。もちろん、その後に個別に変更する事も可能ですし、ベースクラスのコン
ストラクタは呼び出さず、独自に初期化しても問題ありません。

環境設定で設定できる様にするデータ名はメンバ変数config_templateで行ないます。
このメンバ変数はハッシュ変数(のリファレンス)となっており、キーが変数名、値が
その変数が許容する文字列の正規表現または(ラジオボタンなどで)選択すべき値となっ
ています。また、メンバ変数default_valueにハッシュ変数を設定する事で初期値を設
定できます。

HTML::Template用のファイルは別途作る必要がありますが、メンバ変数
config_template の値を元にHTML::Template用変数が作成され、configファイルの値
が設定されます。

これら保存された設定値を使用する他のオブジェクトは、継承して作成したこのクラ
スのオブジェクトを作成し、load_configメソッドを呼び出す事により、ファイルから
読み出されてハッシュ変数へ格納された、バリデーションチェックを行なった値を読
み出せます。

これらにより、環境設定機能を比較的簡単・安全に実装できます。
!!初期化すべきメンバ変数
!config_template
 $self->{config_template} = {
         email   => '^(\w+@[\w.]+)$',
         limit   => '^(\d+)$',
         type    => ["admin", "user", "guest"],
         name    => '^\w+$',
         value   => '^\d*$',
         kind    => ["alpha", "beta"],
 };
!default_value
 $self->{default_value} = {
         email   => "foo@example.com",
         limit   => "20",
         type    => "admin",
         name    => "hoge",
         value   => "10",
         kind    => "alpha",
 };
!!コンストラクタにより初期化されるメンバ変数
!title
環境設定ページに表示されるタイトル
!file_config
設定値を保存するファイル名を指定する際のsetup.datでのkey名
!file_default
setup.datに指定がない場合のデフォルト設定ファイル名
!tmpl_name
テンプレートファイル名
!action_name
環境設定を行なう際のactionパラメータの値
!!load_configメソッドにより設定されるメンバ変数
!flat
設定ファイルまたはフォームにより送られた値を操作するために、主に内部で使われ
るハッシュ変数です。
主に操作を行なうのは、プライベートメソッドである_check_confと_make_flatです。

load_config終了時、通常は空になりますが、正しくパース出来なかった項目があれ
ば、それが残されます。
!conf
設定値を保持するハッシュ変数です。形式はdefault_valueと同じようになります。
load_configメソッド、set_config_form_paramメソッドにより設定され、通常は
load_configメソッドを呼び出した後に使用します。
!tmpl
環境設定フォーム用のTemplateファイルに渡す値を保持するハッシュ変数です。
load_configメソッドにより設定されます。
!!コンストラクタ
 my $self = new Wiki::AdminTemplate($plugin_name);
プラグイン名を引数にとります。
ファイル名の一部に使用されるため英数字が前提です。

渡されたプラグイン名を元に以下の幾つかのメンバ変数を初期化します。
:title:プラグイン名+"プラグインの設定"
:file_config:プラグイン名+"_file"
:file_default:プラグイン名+".dat"
:tmpl_name:プラグイン名+".tmpl"
:action_name:"ADMIN"+大文字のプラグイン名
!!メソッド
!change_value
設定が変更された値毎に呼ばれるフックメソッドです。
!after_save_hook
設定がセーブされたあとに呼ばれるフックメソッドです。
!do_acton
アクションハンドラメソッドです。

SAVEパラメータの有無により設定値の保存+リダイレクトとフォーム表示を切替えま
す。実際の動作は、保存+リダイレクトはsave_configメソッド、フォーム表示は
config_formに引き継がれます。
!config_form
設定フォームの表示を行ないます。

load_configメソッドにより設定値の読み込みとパラメータ設定を行なったあと、
load_templateメソッドによりテンプレートの読み込みとパラメータセットを行ない、
最後にget_htmlメソッドによりHTMLを生成して返します。
!load_config
保存されている設定値の取得とバリデーションチェックを行ないます。

まず、設定値をflatメンバ変数に読み込み、_check_configプライベートメソッドによ
り、config_templateにしたがってパースしつつtmplとconfに結果を返します。

管理メニュー時以外でも、オブジェクトを生成してこのメソッドを呼び出す事により
デフォルト値も含めたバリデーションされた設定値をハッシュによってアクセスする
ために使用します。
!config_file
設定ファイル名をデフォルト名またはsetup.datから取得して返します。
!default_value
default_valueメンバ変数からデフォルト値を取得して返します。
!load_template
テンプレートファイルからテンプレートオブジェクトを生成し、load_configメソッド
で生成されたテンプレート用パラメータを設定します。
このテンプレートオブジェクトは後でget_htmlにより使用されます。
!get_html
すでに作成されているテンプレートオブジェクトからから実際にHTMLを生成します。
このメソッドの戻り値がこのプラグインの戻り値(実際に出力されるHTML)になります。
!save_config
フォームによる更新を処理します。その際に、変更された値毎と、値がファイルに保
存されたあとにフックメソッドを呼びます。
!set_config_from_param
受け取ったCGIパラメータから設定を更新し、保存用データを作成します。