Webformの機能

この記事は、["Webform Features"](https://www.drupal.org/docs/8/modules/webform/webform-features "Webform Features") の抄訳です。

##フォームビルダー##

Form Builder

Webformモジュールは、Drupal8のUIベストプラクティスに基づく直感的なwebformビルダーを提供します。
エンジニアでない方でも簡単にwebformを作成・保守する事が出来ます。

フォームビルダーの特徴:

* ドラッグアンドドロップによるwebformエレメント管理
* テスト投稿の生成
* 既存webform, テンプレート, エレメントからのコピーによる作成

##フォーム設定##

Form Settings

フォーム投稿ハンドリング、メーセージ表示、確認表示はすべてグローバル設定や特定のフォーム設定からカスタマイズ可能です。

フォーム設定のカスタマイズ可能項目:

* 表示内容とボタンラベル
* 確認ページ, 表示メッセージ, リダイレクト
* ドラフト保存
* 投稿内容のプレビュー
* 機密投稿
* クエリーパラメータを使ったエレメントの前処理
* 二重投稿の抑止
* 戻るボタンの無効化
* 変更内容未保存時の警告表示
* クライアントサイドバリデーションの無効化
* ユーザ, webform, ノードごとの単位時間あたり投稿数の制限
* webformや確認ページ,ボタンのデザイン変更
* webformに特定CSSやJavaScriptの差し込み

##エレメント##

Elements

フォームエレメントはDrupal8のForm APIに準拠しているため、Drupal8のすべての [フォームエレメント](https://api.drupal.org/api/drupal/elements/8.2.x) がサポートされています。

利用可能なフォームエレメント:

* **HTML:** テキストフィールド, テキストエリア, チェックボックス, ラジオ, セレクトメニュー, パスワードなど
* **HTML5:** Email, url, 数値, 電話番号, 日付, 数値範囲など
* **Drupal固有:** ファイルアップロード, エンティティリファレンス, テーブルセレクト,日付リストなど
* **カスタム:** [Likert scale](https://en.wikipedia.org/wiki/Likert_scale), スター評価, トグルボタン, クレジットカード, 位置情報, その他入力を含む選択/チェックボックス/ラジオなど
* **マークアップ:** インライン確認メッセージ, HTMLマークアップ, 詳細表示,フィールドセット
* **複合エレメント:** 氏名, 住所, 連絡先情報, クレジットカード

##エレメント設定##

Element Settings

すべてのDrupal8 webformエレメントと振る舞いのデフォルト設定がサポートされています。
またwebformエレメントの振る舞いを拡張する為、いくつかのカスタムプロパティも利用可能です。

標準とカスタムプロパティによって可能になる設定:

* 必須エラーメッセージのカスタマイズ
* [FAPI States API](https://api.drupal.org/api/examples/form_example%21form_example_states.inc/function/form_example_states_form/7.x-1.x)を使った条件分岐ロジック
* インプットマスク([jquery.inputmast](https://github.com/RobinHerbots/Inputmask)を使用)
* セレクトボックスの替わりとして[Select2](https://select2.github.io/)の使用
* テキスト入力エレメントでの単語数, 文字数カウント
* ヘルプポップアップ([jQuery UI Tooltip](https://jqueryui.com/tooltip/)を使用)
* 正規表現パターンバリデーション
* 管理者のみ参照可能なプライベートエレメント
* エレメントごとのユニーク設定

##ソースコード表示##

Viewing Source

Webformモジュールの重要な点は、webformエレメントが開発者が編集・管理する事が出来るDrupalレンダー配列だという事です。Drupalレンダー配列である事によって、開発者はwebformエレメント,レイアウト,デザインを一括で変更する事が出来ます。

##状態/条件ロジック##

States/Conditional Logic

DrupalステートAPIを利用する事によってwebformエレメントを表示したり非表示にしたりするロジックを設定する事が出来ます。

DrupalステートAPIで設定可能な動作:

* 表示/非表示
* オープン/クローズ
* 有効/無効

##マルチステップフォーム##

Multistep Forms

入力フォームはプログレスバーを伴った多段階の入力ページに分割する事が出来ます。
また認証済みユーザは入力済みの内容をドラフトとして自動保存する事が可能です。

マルチステップフォームで有効な機能:

* プログレスバーのカスタマイズ
* 「前へ」「次へ」ボタンの文字とスタイルのカスタマイズ
* ページ遷移間のドラフト保存

##メール/リモート投稿ハンドラー##

Email/Handlers

フォーム投稿時にユーザや管理者に送信されるメール通知や確認メッセージをカスタマイズする事が出来ます。
また投稿データを外部/内部システムやアプリケーションで利用可能にするプラグインが提供されています。

メールサポート機能:

* プレビューおよび再送機能
* HTMLメールの送信
* ファイル添付([Mail Syste](https://www.drupal.org/project/mailsystem)と[Swift Mailer](https://www.drupal.org/project/swiftmailer)モジュールが必要)
* HTMLとプレーンテキストのメールフレンドリーTwigテンプレート
* 個別webformエレメント毎のカスタマイズ可能な表示フォーマット

リモート投稿機能:

* 選択されたエレメントデータの送信
* リモートデータ投稿時にカスタムパラメータの追加

##結果管理##

Results Management

フォーム投稿データは任意でデータベースに保存し、確認したりダウンロードする事が出来ます。
また投稿データについて管理者が注記を加えてフラグ付けする事も可能です。

送信結果管理機能:

* フラグ付け
* 管理者注記追加
* 投稿データのHTML,プレーンテキスト,YAMLフォーマットでの表示
* レポートのカスタマイズ
* GoogleシートやMS Excel用のCSV形式での結果ダウンロード
* フォーム毎のダウンロード設定の保存
* 特定基準での古い投稿データの自動削除

##アクセスコントール##

Access Controls

フォーム作成,データ投稿,結果表示についてそれぞれアクセス権限を設定する事が出来ます。
アクセス権限はロール毎や個別ユーザ単位で設定可能です。

ユーザに付与可能なアクセス権限:

* 新規フォーム作成
* フォームの更新
* フォームの削除
* 投稿データの表示
* 投稿データの更新
* 投稿データの削除
* 選択したエレメントの表示
* 選択したエレメントの更新

##再利用可能なテンプレート##

Reusable Templates

スターター用のテンプレートと複数のサンプルフォームが提供されています。
webform管理者はそれらを更新したりコピーしたりする事によって必要なテンプレートを作成出来ます。

スターター用テンプレート:

* お問い合わせ
* 寄付
* 評価
* 発行
* 求人
* 求職者プロフィール
* 登録
* イベント評価
* 購読
* ユーザプロフィール

サンプルwebform:

* 各エレメント
* 基本レイアウト
* Flexboxレイアウト
* インプットマスク
* 選択肢
* ウィザード

##再利用可能な選択肢リスト##

Reusable Options

管理者はセレクトメニュー,チェックボックス,ラジオボタンなどで再利用可能なグローバル選択肢を定義出来ます。
またWebformモジュールにはステート,国,[リッカート合意](https://en.wikipedia.org/wiki/Likert_scale)などについての初期値が設定済みです。

利用可能な再利用可能選択肢:

* 国コードと名称
* クレジットカードコード
* 日付、月、 タイムゾーン
* 教育、雇用状況、人種、産業、言語、婚姻状況、関係、サイズ、タイトル
* リッカート合意、比較、重要度、品質、満足度、10スケール
* 州/州コードと名称

##インターナショナリゼーション##

Internationalization

フォームと設定はDrupalのコンフィグレーション翻訳システムを用いる事によって複数の言語に翻訳可能です。

##Drupalインテグレーション##

Drupal Integration

フォームはノードに添付したりブロックとして表示可能であり、SEO対策として有効な固有URLを持つ事が出来ます。
またWebformエレメントはカスタムフックやプラグインで簡単に変更可能なレンダー配列です。

##アドオン & サードパーティー設定##

Add-ons & Third Party Settings

アドオンタブでは、WebformモジュールやDrupal From APIを拡張するモジュールやプロジェクト一覧が表示されます。

##拡張可能なプラグイン##

Extendable Plugins

Webformモジュールは寄与モジュールや拡張モジュールがwebformエレメントや投稿データハンドリングの機能を拡張出来るよう[プラグイン](https://www.drupal.org/docs/8/api/plugin-api/plugin-api-overview)とフックを提供しています。

* **Webformエレメントプラグイン** はWebformモジュールと適切に統合されるようにエレメントを統合したり拡張する際に使用されます。

* **Webformハンドラープラグイン** は開発者がwebform投稿データの取り扱いを拡張する際に使用します。

* **Webformエクスポータープラグイン** は開発者がカスタムフォーマットやカスタムファイルタイプでデータをエクスポートする際に使用されます。

##ヘルプと動画チュートリアル##

Help & Video Tutorials

Webformモジュールについて以下のようなサンプルやインラインヘルプ、スクリーンキャストが提供されています。

スクリーンキャスト一覧:

##Drushインテグレーション##

Drush Integration

以下のDrushコマンドが提供されています:

* 複数の投稿データの生成
* 投稿データのエクスポート
* 投稿データの削除
* サードパーティーライブラリのダウンロードと管理
* YAML設定ファイルのエクスポート