目次
Bureaucracy プラグイン
この拡張は二年以上更新されていません。もはや維持管理や対応がされておらず、互換性に問題がある可能性があります。
この拡張機能は 'plugin' または 'template' 名前空間にないため、無視されます。
類似 bureaucracyau, conform, contact, contactmodern, form, openas
必要とされるプラグイン calendoku, dirtylittlehelper, pagemod, qrcodescanner
bureaucracyプラグインは、DokuWiki の中に整然としたHTMLフォームを作成します。 入力フォーマットの検証を自動的にプラグインが処理し、コーディングが不要です。 ユーザ入力を、事前に設定したアドレスに電子メール送信したり、テンプレートを使用して新規ページ作成に使用できます。
ダウンロードとインストール
変更履歴
- Merge pull request #330 from dokuwiki-translate/lang_update_799_17063… (2024-01-27 23:30)
- translation update (2024-01-27 20:45)
- Merge pull request #328 from dokuwiki-translate/lang_update_761_17020… (2023-12-08 14:51)
- translation update (2023-12-08 14:35)
- Version upped (2023-05-16 23:50)
- alternative fix for c81c7b7a0e07c9e4e7e24b7e972dc9b18c7e8b4c (2023-05-16 11:07)
- Revert "No need to validate 'submit' fields" (2023-05-16 11:03)
- Version upped (2023-04-20 23:50)
推奨追加プラグイン
オープン Wiki 上で、スパムを回避するために CAPTCHA プラグインを使用することがあります。 CAPTCHA プラグインがインストールされている場合、bureaucracy プラグインはCAPTCHAチェックをフォームの実行処理の中に自動的に統合します。 DokuWiki がメール送信できない時、SwiftMail プラグインが役立ちます。 bureaucracy プラグインのテンプレートアクションを使用すると、利用し易くするために情報を組み立て保管する機能を、構造化データプラグインのdataentoryのテンプレートに追加することができます。dataentory では、フォームからの情報を配置するために、bureaucracy プラグインのプレースホルダーを利用できます。
追加アクション
注目すべき追加プラグインは、pagemod プラグインです。
bureaucracy プラグインに(現在のテンプレート機能やメール機能に加えて)既存のページにデータを追加するpagemod
アクションを追加します。
追加フィールド
前記のように構造化データプラグインはテンプレートで便利になりますが、dataplugin
項目も提供します。
つまり、 構造化データプラグインの型と type aliases を持つ項目を作成できるようになります。
Some of these types has a nice layouting e.g. pagesuggestions or listing using predefined options from type aliases. 例を参照して下さい。
警告
簡単にスパムゲートウェイとして悪用される可能性があるため、CAPTCHAがない場合、このプラグインは閉鎖環境のwiki上でのみ使用すべきです。
使用方法
例を見てみましょう:
<WRAP clear></WRAP>
<form> Action mail me@example.com Thanks "Thanks for submitting your valuable data." Fieldset "A set of fields" Textbox "Employee Name" "=Your Name" number "Your Age" >13 <99 email "Your E-Mail Address" textbox "Occupation (optional)" ! password "Some password" fieldset "even more fields" select "Please select an option" "Peaches|Apples|Oranges" static "Some static text that could be an agreement" yesno "Read the agreement?" textarea "Tell me about your self" textbox "You need to write 'agree' here" /^agree$/ submit "Submit Query" </form>
ご覧のように、データが送信されるべき電子メールアドレス、ユーザーがフォームを送信する時表示される感謝の文章を定義できます。 以下は、記入用の様々な項目です。
項目定義:
- 項目は、タイプとラベルで定義されます。
fieldset
とsubmit
ボタンの場合、ラベルは省略できます。
select
タイプのような項目は、三番目のパラメータが必要です。- 追加の制約は、主要なオプションの後に追加できます。
- スペースが含まれている場合、引数を二重引用符で囲む必要があります。例:
“S p a c e s”
プラグインは、項目のタイプと設定された制約でフォームの検証を行います。
項目
- action
- 最初のパラメータは、対応する操作(下記を参照)であることが必要です。
現在対応しているのはmail
とtemplate
とpagemod プラグイン
(このプラグインがインストールされている場合)です。 mail
型の場合の追加パラメータ:- データを送信する一つ以上の電子メールアドレス(必須項目)
template
型の場合の追加パラメータ:- テンプレートとして使用するページ名又は名前空間名(末尾がコロン)、又は名前空間テンプレートの対象として使用を試みる単独のアンダースコア
_
(必須項目) - 新規ページを作成する「名前空間:前置句」又は「名前空間:」(末尾がコロン)(任意項目)
- 複数の項目を組合せてページ名にする場合、使用する区切り記号(任意項目)
- thanks
- フォームが送信された時に表示される文章の定義(任意項目)
- fieldset
- 項目の新しい組を作成
- ラベルは任意項目
- 上にある別の項目の値に応じて表示/非表示が可能(下記を参照)
- 切替は二番目のパラメータに指定された項目に依存(任意項目)
- 項目が設定されているか三番目のパラメータに指定した値と完全に一致した場合、
fieldset は表示される(任意項目)
- static
- フォームに静的な文章を追加
- wiki
- static に似ているが、Wiki 構文として入力値を構文解析する
- 計算コストが高いので、頻繁な使用は避けるべき
- textbox
- 一行の入力項目を作成
- ラベルは必須項目
- password
- 一行の入力項目を作成
- ラベルは必須項目
- email
- 一行の入力項目を作成
- ラベルは必須項目
- 入力がメールアドレスであることを検証
-
- 一行の入力項目を作成
- ラベルは必須項目
- 入力が数値であることを検証
- textarea
- 複数行の入力項目を作成
- ラベルは必須項目
- 10行というデフォルトサイズから N 行へ変更するために
xN という引数を使用(x23
)(任意項目)
-
- checkbox を作成
- ラベルは必須項目
- yes と no のデフォルト値が必須(
=true_value !false_value
)
- select
- 選択一覧を作成
- ラベルは必須項目
- 二番目の引数にパイプ “|” 文字区切りの選択項目が必須\\(
“Peaches|Apples|Oranges”
)
- hidden
- 静的なデータの隠し項目を作成
- ラベルは必須項目
- デフォルト値パラメータが必須(
“=some value”
)
- hiddenautoinc
- ラベルは必須項目
- フォームを送信する毎に1ずつ増加する番号を持つ隠し項目を作成
- submit
- 送信ボタンを作成(必須項目)
- ボタンラベルは任意項目
- user / users
- DokuWiki のユーザーかDokuWiki のユーザー一覧
- ラベルは必須項目
- 自動補完を提供
- date
- YYYY-MM-DD 形式の日付
- ラベルは必須項目
- 日付選択を提供
- addpage page_tpl page_tgt
- adds another page
page_tgt
based on a template pagepage_tpl
- only for use with the template action
- page_tpl is absolute path to template page
- page_tgt is relative to destination of page created by action field. e.g. action field tries to create
new:destination
, then addpage will try to addnew:destination:page_tgt
- dataplugin(プラグインが必須)
- 項目を表示するために構造化データプラグインが必須(例を参照)
- ラベルは必須項目
- an additional parameter is starting by underscore
_
for type of field, using dataplugin type syntax- datatypes with a type alias that defines 'valid values' will appear as a (multi)select field
- otherwise it appears as usual textbox, sometimes with 機能追加 as datepicker and pagesuggestions
- labels
- パラメータはラベル変換用一覧の wiki ページ
制約とデフォルト値
>
で始まり数字が続く場合、数字よりも入力データが大きい必要があります。<
で始まり数字が続く場合、数字よりも入力データが小さい必要があります。=
で始まる場合、デフォルト値を設定します。- 単一の
!
文字を使用した場合、項目は省略可能です。 - 単一の
@
文字を使用した場合、値をテンプレートモードのページ名として使用します。 number
項目で++
を使用した場合、フォームを実行するたびに自動的にインクリメントするカウンターになります。/
文字で囲んだ正規表現は、項目を受け付ける前に正規表現に一致する必要があります(大文字と小文字を区別しない)。例:/^[^\/:]+$/
ページ名に相応しい。/
と:
文字は許されません。/^[0-9 \/()+\-]+$/
電話番号に相応しい。数字と()-+/
文字だけが許されます。
- データプラグイン項目の場合のみ、
_
で始まる type alias を定義します。
外部ラベル名
デフォルトでは、提供されたすべてのラベルが使用されます。 例えば、フォームで表示され、テンプレートモードのプレースホルダとして使用されます。 場合によっては、項目名には単純な名前を使用し、フォーム上ではもっと一般的なラベルを表示したいかもしれません。
独立したwikiページにラベルの変換を定義し、labels
項目に、このページを設定することで達成できます。
<form> action mail me@example.com labels mylabels fieldset "field" textbox "name" number "age" >13 <99 submit "submit" </form>
変換ページには label = translation
の項目を持った wiki の番号なしリストがなくてはならない:
* field = Tell us about yourself" * name = Your Name * age = Your Age * submit = Send your Data
上記は、次のようなフォームになります:
Fieldset との依存関係
前の質問で特定の答えがあった場合のみ、フォームの一部を質問すべき場合があります。
Fieldset を使用して、そのような単純な依存関係を作成できます。
次の例を考えてみます:
<form> action mail me@example.com fieldset "Your Order" textbox "Your Name" select "What do you want" "Car|Blimp" fieldset "Car Parameters" "What do you want" "Car" number "Number of Wheels" textbox "Extras" fieldset "Blimp Parameters" "What do you want" "Blimp" select "Filling" "Helium|Hot Air" number "Size" fieldset "Payment" yesno "Can you pay right now?" fieldset "Details" "Can you pay right now?" textbox "Name" number "Amount" fieldset "Confirm Order" submit "Submit Query" </form>
この例では、ユーザーは車や飛行船の注文を選択できます。
選択に応じて、第二または第三の fieldset を非表示または表示します。
fieldset
の二番目のパラメータは、以前に定義された項目を参照する項目であり、三番目のパラメータは、fieldset を表示する条件となる項目の値です。
完全一致だけが対応しており、一番良いのは上記のようにこの機能と select
項目との組み合わせることです。
第四の fieldset の yesno
項目のチェックボックスに記入すると、第五の fieldset が表示され、正確な詳細情報を記入できます。
fieldset には三番目のパラメータが設定されていないので、参照項目が設定されれば確認されます。
リンクの事前設定項目
いくつかの事前設定項目と bureaucracy フォームをリンクしたいこともあります。
@
で囲んだ項目名を使ってリンクにパラメータを追加することで、簡単に達成できる。
このページの前のセクションで orderform
と呼ばれるフォームを想定してください。
これは熱飛行船を発注するためのフォームへリンクする方法です:
[[orderform?@What do you want@=Blimp&@Filling@=Hot Air|Order a Hot Air Blimp!]]
操作モード
bureaucracy は三つのことを実行します:
- 整ったフォームを表示する。
- ユーザー入力を検証する。
- 操作モードにユーザー入力を与える。
最後の工程はデータが処理される所です。
上記のように、どの操作を使用するかは action
項目で定義します。
現在、2つのモードに対応します:mail
と template
。
追加モード(例:データベースにデータを格納する)は簡単に追加できます。
Mail モード
これは簡単な操作です。 全てのユーザー入力は、設定された電子メールアドレスに電子メールで送信されます。 使用方法は、上の例を参照してください。 スペース区切りの複数メールアドレス指定も可能です。
Template モード
指定されたページをテンプレートとして使用するこの操作は、定義されたプレースホルダーをユーザー入力で置き換え、wiki ページを作成します。 とても強力ですが、やや複雑な概念です。
action 行は以下のようになります:
action template [テンプレート] [宛先] [区切り記号]
テンプレート
は単一のページ、または名前空間の全部(末尾がコロン)いずれかです。名前空間が指定された場合、含まれるサブ名前空間とページ全てが宛先にコピーされ、交換用のパターンは、すべてのページに適用されます。テンプレート名にアンダースコア(_
)を指定すると、宛先の名前空間に設定された 名前空間テンプレート を使用しようとします。宛先
は bureaucracy に新規ページの作成先を指示します。通常名前空間(末尾がコロン)です。詳細は次のセクションを参照して下さい。区切り記号
フォームの複数の項目値使用して新規ページ名を作成できます。この文字はこれらを連結する方法を定義します。(次のセクションの方法1を参照して下さい。)
宛先の定義
Template モードを使用する場合、結果のページを作成する場所を定義する必要があります。 複数の方法があります。
方法1:最も簡単な方法は、出力の名前空間を指定し、@
文字を使用して名前に使う項目を指定することです。
次に例を示します:
<form> action template userstpl users: : fieldset "Create Your User Page" select "What's your Continent?" "Europe|N. America|S. America|Asia|Australia" @ textbox "What's your Name?" @ textarea "Enter a short bio" ! submit </form>
これは大陸と名前の項目を使用して新規ページを作成します。
例えば、これらの項目に “Europe” と “Andi” を記入すると、結果のページは users:europe:andi
になります。
方法2:結果のページ名をある程度詳細に制御したいこともあります。
宛先パラメータの中でプレースホルダを使用し、項目定義の中で @
文字を指定をしないことで達成できます。
プレースホルダーは @@
文字で囲んだ項目名です。
更に strftime パラメータが使用できます。
別の例を示します:
<form> action template userstpl "users:%Y:@@What's your Name?@@:start" fieldset "Create Your User Page" select "What's your Continent?" "Europe|N. America|S. America|Asia|Australia" textbox "What's your Name?" textarea "Enter a short bio" ! yesno "Do have publication?" fieldset "Add your publications" "Do have publication?" textarea "Publications:" addpage users:publicationtemplate publications fieldset "Finish" submit </form>
上記は、現在の年・私の名前に基づいて名前空間を作成し、以下の名前で開始ページを作成します:users:2012:andi:start
方法3:Fieldset との依存関係 と連動する時、fieldset が表示された場合は追加ページを追加し、fieldset が非表示の場合はページを省略したいこともあります。
特別な addpage
項目で実現できます。
質問の fieldset に追加するだけです:
addpage additionaltpl somepage
上の例の二番目の fieldset は、チェックボックスに応じて文書のページが追加されます。
追加ページのテンプレートは、次の絶対パスに置かれます:users:publicationtemplate
yesno
項目が記入されれば、追加ページは users:2012:andy:start:publications
に作成されます。
テンプレートの作成
テンプレートは、フォームと同じフィールドを含んでいる必要があり、他のプレースホルダーも利用可能です。
プレースホルダー | 操作 |
---|---|
@@Field label@@ ##Field label## | フォーム内にユーザーが補充した実際の値で置換えられます。 |
@@Field label|Nice alternative@@ | 空の項目だった場合、Nice alternative テキストが表示されます。 |
@NSBASE@ | 新規ページの名前空間。 例:新規ページが foo:bar:baz:bang の場合、@NSBASE@ は baz になります。 |
%Y %F %a %Y-%m-%d… etc | 現在の時刻を参照するための strftime パラメータ |
%% | % 文字に置換え。テンプレート内で偶発的な時間の置換えを回避するために必要 |
@ID@ @USER@ @MAIL@ … etc | DokuWiki のテンプレート用置換パターンも利用可能です。 |
上の例の userstpl
では、次のページを持つことができます:
====== @@What's your Name?@@ ====== I'm living in @@What's your Continent?@@. I'm a user since %Y-%m-%d. @@Enter a short bio|FIXME please fill in your biography@@
結果は全てのユーザーデータで補充され次のようになります:
====== Andreas Gohr ====== I'm living in Europe. I'm a user since 2007-12-23. It's me :-)
ACL の確認と runas オプション
デフォルトで、このプラグインはフォームに入力するユーザの権限を使用して、Template モードのアクセス制御リスト (ACL)を確認します。 これは、少なくともテンプレートに対する読込権限と新規ページを保存する名前空間に対する作成権限が、ユーザーに必要なことを意味します。
しかし、直接のアクセス権をあたえることなく、制限された名前空間にページを作成する方法を匿名ユーザーに与えたい場合があります。
ここが runas
オプションの出番です。
設定管理の中でこのオプションにユーザー名を指定できます。
フォーム入力するユーザーとは無関係に、ここで指定したユーザーを常に使用して、上記の ACL を確認します。
この方法によって、ACL 管理でこの特定の仮想ユーザーに必要な権限を指定できます。
注意:runas
ユーザーは存在する必要はありません。
実際には、非存在ユーザーを使用することをお勧めします。
存在する場合でも、ACL の確認は、ユーザーレベルの権限のみで実施され、ユーザーのグループは無視されます。
例
Checkbox 項目
Example code for checkbox 項目のコード例です:
yesno "Are you happy?" "=Yes sir" "!No sir" yesno "Show fieldset?" fieldset "Shown on checking the box" "Show fieldset?" textbox "Share your praise"
- Checkbox 項目は、チェックした場合
Yes sir
、チェックしなかった場合No sir
のデフォルト値を返します。デフォルト値を省略すると、戻り値なしになります。 - fieldset が
yesno
項目を参照する場合、yesno
の設定を確認する代わりに、三番目の引数は不要です。メールやテンプレートにyesno
項目からの値を返すことを望まない限り、fieldset が依存するyesno
にはデフォルト値は不要です。
数字項目
number "One" number "Two" ++ number "Third" >3 <40 hiddenautoinc "Four (notice: conflicts with Two)"
- 数字項目 One は、数字のみを受け付けます
- 数字項目 Two は、最後の番号を記憶し、1増分します。変更することも可能です。
- 数字項目 Third は、3 と 40 の間の任意の数を受け付けます。
- 数字項目 Four は、隠れ項目で、フォームが保存される度にインクリメントされます。(現時点では、この項目は自動インクリメント数字項目と競合します。同じフォーム上で組合せないでください。)
問題
バグや機能要求は Github バグ追跡に報告してください。