DokuWiki

It's better when it's simple

ユーザ用ツール

サイト用ツール


ja:plugin:bureaucracy

Bureaucracy プラグイン

互換性のある DokuWiki バージョン

Binky, Weatherwax, ​"​Angua",​ "Adora Belle"

plugin 簡単にHTMLフォームを作成し、電子メールを使ってデータを収集したり、ページを作成するために利用する。

最終更新日
2014-07-28
種類
Syntax, Action
リポジトリ
ソース
競合
bureaucracyau, form

この拡張は二年以上更新されていません。もはや維持管理や対応がされておらず、互換性に問題がある可能性があります。

この拡張機能は 'plugin' または 'template' 名前空間にないため、無視されます。

類似 bureaucracyau, conform, contact, contactmodern, form, openas

タグ create, email, form, poll

必要とされるプラグイン calendoku, dirtylittlehelper, pagemod, qrcodescanner

bureaucracyプラグインは、DokuWiki の中に整然としたHTMLフォームを作成します。 入力フォーマットの検証を自動的にプラグインが処理し、コーディングが不要です。 ユーザ入力を、事前に設定したアドレスに電子メール送信したり、テンプレートを使用して新規ページ作成に使用できます。

ダウンロードとインストール

上記のダウンロード URL からプラグイン管理を使用して、プラグインをダウンロード、インストールします。 プラグインを手動インストールするには、プラグインを参照して下さい。

変更履歴

推奨追加プラグイン

オープン 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>

ご覧のように、データが送信されるべき電子メールアドレス、ユーザーがフォームを送信する時表示される感謝の文章を定義できます。 以下は、記入用の様々な項目です。

項目定義:

  • 項目は、タイプとラベルで定義されます。
    • fieldsetsubmit ボタンの場合、ラベルは省略できます。
  • select タイプのような項目は、三番目のパラメータが必要です。
  • 追加の制約は、主要なオプションの後に追加できます。
  • スペースが含まれている場合、引数を二重引用符で囲む必要があります。例: “S p a c e s”

プラグインは、項目のタイプと設定された制約でフォームの検証を行います。

項目

  • action
    • 最初のパラメータは、対応する操作(下記を参照)であることが必要です。
      現在対応しているのは mailtemplatepagemod プラグイン(このプラグインがインストールされている場合)です。
    • 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 page page_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 add new: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 は三つのことを実行します:

  1. 整ったフォームを表示する。
  2. ユーザー入力を検証する。
  3. 操作モードにユーザー入力を与える。

最後の工程はデータが処理される所です。 上記のように、どの操作を使用するかは action 項目で定義します。 現在、2つのモードに対応します:mailtemplate 。 追加モード(例:データベースにデータを格納する)は簡単に追加できます。

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 バグ追跡に報告してください。

ja/plugin/bureaucracy.txt · 最終更新: by 106.136.13.74

特に明示されていない限り、本Wikiの内容は次のライセンスに従います: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki