=== Omusubi ===
Contributors: kanedashinya
Donate link: https://uuuu.to/
Tags: forms, contact form, form builder, drag and drop, submissions
Requires at least: 6.2
Tested up to: 6.9
Requires PHP: 7.4
Stable tag: 1.1.1
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

ドラッグ&ドロップで高機能なフォームを作れる、formrun 風ビジュアルフォームビルダー。メール通知・回答管理・期間限定受付まで標準搭載。

== Description ==

**Omusubi** は、WordPress 管理画面のビジュアルビルダーでフォームを作成できるプラグインです。クリック操作だけでお問い合わせフォーム・資料請求・アンケート・プレゼント応募など多彩なフォームを構築でき、送信データは管理画面の表形式ビューで確認・CSV 出力できます。

= 主な機能 =

* **ドラッグ&ドロップのビジュアルビルダー** — 15種類以上のフィールドタイプ (テキスト・メール・電話・郵便番号・テキストエリア・セレクト・ラジオ・チェックボックス・数値・日付・時刻・URL・ファイル・見出し・区切り線・非表示)
* **12 種類のテンプレート** — お問い合わせ / 資料請求 / アンケート / イベント申込 / 採用エントリー / 予約受付 / プレゼント応募 / 見積り依頼 / 無料相談予約 / 体験レッスン / 商品注文 / 取材依頼 / クレーム / 会員登録 / FAQ / 退会
* **横2列レイアウト** — 同じ行に2つのフィールドを配置可能
* **条件分岐表示** — 他フィールドの値に応じて表示/非表示を切替
* **ショートコード対応** — `[omusubi id="1"]` を記事や固定ページに貼るだけ
* **管理者通知メール + 送信者への自動返信メール** — 件名・本文をカスタマイズ可能
* **回答データの表形式管理** — ステータス管理 (未読/既読/返信済み/アーカイブ)・CSV ダウンロード
* **期間限定受付** — プレゼント応募キャンペーンなどで、指定日時以外は送信を受け付けない機能
* **半角英数字入力の強制** — メール・電話番号・郵便番号欄で全角入力を自動で半角に変換
* **郵便番号から住所オートフィル** — 7桁の郵便番号を入力してボタンクリックで住所を自動入力 (Zipcloud API 使用、下記「外部サービスについて」参照)
* **プライバシーポリシー同意チェック** — カスタムテキスト対応
* **プレビューページ自動生成** — 公開前に実際のレイアウトを確認可能
* **テーマカラーのカスタマイズ** — プリセット8色 + 自由なカラーピッカー
* **日本語フル対応** — UI・テンプレート・エラーメッセージすべて日本語

= 使い方はかんたん =

1. 「Omusubi」メニューから「新規フォーム作成」をクリック
2. テンプレートを選ぶか、白紙から作成
3. フィールドをドラッグ&ドロップで配置・編集
4. メール通知・デザインを設定
5. 保存してショートコードをコピー、任意のページに貼り付け

= ブラウザサポート =

モダンブラウザ全般 (Chrome, Firefox, Safari, Edge の最新版)。Internet Explorer はサポートしていません。

== Installation ==

= 自動インストール =

1. 管理画面「プラグイン → 新規追加」を開く
2. 検索窓に「Omusubi」と入力
3. 「今すぐインストール」をクリック、続いて「有効化」

= 手動インストール =

1. プラグインの zip ファイルをダウンロード
2. 管理画面「プラグイン → 新規追加 → プラグインのアップロード」で zip を選択
3. 「今すぐインストール」→「プラグインを有効化」

= 有効化後 =

左メニューに「Omusubi」が追加されます。そこから新規フォーム作成に進んでください。

== Frequently Asked Questions ==

= フォームをページに表示するには? =

フォーム一覧の各行に表示されるショートコード `[omusubi id="1"]` をコピーして、固定ページ・投稿・ブロックエディタの「ショートコード」ブロックに貼り付けてください。

= フォームの保存先は? =

フォーム定義は `{prefix}omusubi_forms` テーブル、送信された回答は `{prefix}omusubi_submissions` テーブルに保存されます (`{prefix}` はサイトのテーブル接頭辞、通常は `wp_`)。

= 自動返信メールが届きません =

1. フォームに `email` タイプのフィールドが含まれていることを確認してください
2. 「メール設定」タブで「送信者に自動返信メールを送信」が有効化されていることを確認
3. WordPress 本体の `wp_mail()` が動作している必要があります。サーバーによっては SMTP プラグイン (WP Mail SMTP 等) の併用を推奨します

= 郵便番号検索はどのように動きますか? =

郵便番号フィールドの「住所検索」ボタンを押すと、ブラウザから第三者サービス (Zipcloud) の API に 7桁の郵便番号が送信され、対応する住所が返ってきます。詳しくは「外部サービスについて」の項目をご覧ください。この機能はフォーム編集画面で「対象の住所フィールド」を設定した場合のみ有効になります。

= 期間限定の応募フォームを作れますか? =

はい。「メール設定」タブの「受付期間」セクションで、受付開始日時と終了日時を設定できます。期間外はフォームが表示されず、代わりに案内メッセージが表示されます。サーバー側でも検証しているため、フロントエンドのJSを迂回した直接送信もブロックされます。

= プラグインを削除するとデータはどうなりますか? =

デフォルトではプラグイン削除時にテーブル・オプション・プレビューページをすべて削除します。データを残したい場合は、プラグインを削除する**前**にオプション `omusubi_keep_data_on_uninstall` を `1` に設定してください (例: WP-CLI `wp option update omusubi_keep_data_on_uninstall 1`)。

= 送信回数やスパム対策は? =

現在の 1.0.0 では、WordPress 標準の nonce 検証と必須項目チェックのみです。大量の自動送信が気になる場合は、reCAPTCHA 等のプラグインと組み合わせるか、期間限定受付機能で受付ウィンドウを絞ってください。

= 他言語で使えますか? =

翻訳テンプレート (.pot) は `languages/` に同梱されています。`omusubi-en_US.po` 等を作成して翻訳を提供いただければ、パッケージに同梱していきたいと考えています。

== Screenshots ==

1. フォーム一覧 — ドラッグで並び替え、1クリックでショートコードをコピー
2. ビジュアルビルダー — ドラッグ&ドロップでフィールドを配置、右パネルで詳細設定
3. 回答一覧 — 表形式で一覧表示、ステータス管理、CSV ダウンロード

== Changelog ==

= 1.1.1 =
* フォーム単位のカスタム CSS 入力機能を削除 (WordPress.org プラグインディレクトリのレビュー方針に準拠)
* 関連する管理画面 UI / JavaScript / フロント側の `wp_add_inline_style` 出力をすべて取り除き、設定の保存パスからも `custom_css` フィールドを排除

= 1.1.0 =
* Slack 通知機能を追加 — Slack Incoming Webhooks を利用してフォーム送信時に指定チャンネルへ通知
* Google スプレッドシート連携を追加 — Google Apps Script Web App 経由でフォーム送信内容を 1 行ずつ追記 (Google フォームと同等の運用が可能)
* Webhook URL はホスト名ホワイトリスト方式 (保存時・送信時の二重検証)
* どちらもフォーム単位で有効/無効を切替 (デフォルト無効)

= 1.0.0 =
* 初回リリース
* ビジュアルフォームビルダー (15+ フィールドタイプ)
* 12 種類のフォームテンプレート
* 管理者通知・自動返信メール
* 回答の表形式管理 + CSV エクスポート (オプトイン式・デフォルトは無効)
* 期間限定受付機能 (プレゼント応募等で使用)
* 郵便番号→住所オートフィル (Zipcloud API 連携)
* 半角英数字入力の強制 (メール・電話・郵便番号)
* 横2列レイアウト対応
* 条件分岐表示
* プレビューページ自動生成
* プライバシーポリシー URL / 本文アコーディオン表示
* Google reCAPTCHA v2/v3 連携 (全体設定で切り替え)
* テーマカラー切り替え (プリセット + カラーピッカー)
* Font Awesome Free 6.5.1 のローカルバンドル (外部 CDN 不使用)
* WordPress マルチサイト対応のアンインストール処理

== Upgrade Notice ==

= 1.1.1 =
WordPress.org プラグインレビュー方針 (任意 CSS/JS/PHP の保存機能を許可しない) に従い、フォーム単位のカスタム CSS 機能を削除しました。デザインのカスタマイズは引き続きテーマカラーの切り替えで行えます。

= 1.1.0 =
Slack 通知と Google スプレッドシート連携を追加。フォーム送信内容を Slack チャンネルへ通知したり、スプレッドシートに 1 行ずつ追記できるようになりました。

= 1.0.0 =
初回リリース。

== External services ==

このプラグインは、特定の機能を使用した場合のみ、以下の第三者サービスと通信します。

= Zipcloud (郵便番号検索 API) =

**何のためのサービスか**
日本の7桁郵便番号から対応する住所 (都道府県・市区町村・町域名) を取得するための無料 API です。

**いつ通信が発生するか**
エンドユーザーが、郵便番号フィールド横の「住所検索」ボタンを**手動で押したとき**のみ発生します。フォーム送信時や管理画面の読み込み時には通信しません。

**送信されるデータ**
フォームに入力された7桁の郵便番号のみ。氏名・メールアドレス等の個人情報は一切送信されません。通信はエンドユーザーのブラウザから直接 Zipcloud に対して行われ、WordPress サーバーを経由しません。

**通信先**
* API エンドポイント: https://zipcloud.ibsnet.co.jp/api/search

**サービス提供元**
株式会社アイビス (https://zipcloud.ibsnet.co.jp/)

**利用規約・プライバシーポリシー**
* Terms of service: https://zipcloud.ibsnet.co.jp/rule/api
* Privacy policy:    https://www.ibsnet.co.jp/privacy-policy/

フォーム編集画面で郵便番号フィールドに「対象の住所フィールド」を設定していない場合、この機能は無効化され、通信は発生しません。

= Google reCAPTCHA (スパム対策) =

**何のためのサービスか**
Google reCAPTCHA v2 / v3 を使用してフォームのスパム送信や自動送信を検出・拒否します。

**いつ通信が発生するか**
プラグインの「全体設定」画面で reCAPTCHA を有効化し、サイトキー・シークレットキーを登録した場合のみ、以下のタイミングで Google のサーバーと通信します:

1. フォームが表示されるページが読み込まれた時 (reCAPTCHA の JS が Google からロードされる)
2. ユーザーがフォームを送信した時 (ブラウザから Google にトークン検証リクエストが送信され、サーバー側でも Google の検証 API にリクエストを送る)

reCAPTCHA を無効 (デフォルト) のままにしている場合、一切通信は発生しません。

**送信されるデータ**
* ブラウザ → Google: ユーザーの操作情報 (クリック・マウス動作等、ボット判定のため Google が収集)、IP アドレス、ユーザーエージェント、Cookie
* WordPress サーバー → Google: 送信されたトークン、管理者が入力したシークレットキー、送信者の IP アドレス

**通信先**
* reCAPTCHA JS: https://www.google.com/recaptcha/api.js
* 検証 API: https://www.google.com/recaptcha/api/siteverify

**サービス提供元**
Google LLC

**利用規約・プライバシーポリシー**
* Terms of service: https://policies.google.com/terms
* Privacy policy:    https://policies.google.com/privacy
* reCAPTCHA terms:   https://www.google.com/recaptcha/about/

この機能はデフォルトでは無効です。管理画面で有効化した場合のみ、Google と通信します。

= Slack (フォーム送信通知 — Incoming Webhooks) =

**何のためのサービスか**
管理者が指定した Slack チャンネルに、フォーム送信内容を即時通知します。Slack Incoming Webhooks を利用します。

**いつ通信が発生するか**
管理者がフォームの「メール設定 → Slack 通知」で機能を有効化し、`hooks.slack.com` の Webhook URL を登録した場合のみ、フォームが送信されたタイミングで WordPress サーバーから Slack に対して 1 回 POST します。

**送信されるデータ**
* フォームに入力された内容 (フォーム編集画面で定義したフィールドの値)
* 通知タイトル (管理者が設定したテンプレート)
* 送信日時

訪問者の IP アドレスや User Agent は送信しません。Webhook URL は `hooks.slack.com` 以外のホストでは保存・送信されないようプラグイン側で検証しています。

**通信先**
* Webhook エンドポイント: https://hooks.slack.com/services/...

**サービス提供元**
Slack Technologies, LLC

**利用規約・プライバシーポリシー**
* Terms of service: https://slack.com/terms-of-service
* Privacy policy:    https://slack.com/trust/privacy/privacy-policy

この機能はデフォルトでは無効です。フォーム単位で有効化した場合のみ、Slack と通信します。

= Google Apps Script (Google スプレッドシート連携) =

**何のためのサービスか**
管理者が Google スプレッドシート上の Apps Script で公開した Web App エンドポイントへフォーム送信内容を POST し、スプレッドシートに 1 行ずつ追記します。Google フォームと同様に、提出を時系列でリスト化できます。

**いつ通信が発生するか**
管理者がフォームの「メール設定 → Google スプレッドシート連携」で機能を有効化し、`script.google.com` の Web App URL を登録した場合のみ、フォームが送信されたタイミングで WordPress サーバーから Google Apps Script に対して 1 回 POST します。

**送信されるデータ**
* フォームに入力された内容 (フィールド ID・ラベル・値の配列)
* フォーム ID とフォーム名
* 送信日時 (WordPress サーバーのローカル時刻)

訪問者の IP アドレスや User Agent は送信しません。送信先 URL は `script.google.com` および `script.googleusercontent.com` 以外のホストでは保存・送信されないようプラグイン側で検証しています。

**通信先**
* Apps Script Web App: https://script.google.com/macros/s/.../exec

**サービス提供元**
Google LLC (Google Apps Script / Google Drive)

**利用規約・プライバシーポリシー**
* Terms of service: https://policies.google.com/terms
* Privacy policy:    https://policies.google.com/privacy
* Apps Script terms: https://developers.google.com/apps-script/terms

この機能はデフォルトでは無効です。フォーム単位で有効化した場合のみ、Google Apps Script と通信します。

== Privacy ==

= プラグインが保存するデータ =

* **フォーム定義** — タイトル・フィールド構成・メール設定 (`{prefix}omusubi_forms`)
* **送信された回答** — 訪問者が入力したフォームデータ (`{prefix}omusubi_submissions`)
* **送信元 IP アドレス** — 各送信レコードに `ip_address` として記録 (不正送信の調査用)
* **User Agent** — 各送信レコードに記録 (先頭 500 文字まで)
* **送信日時** — 各送信レコードのタイムスタンプ

= プラグインが第三者に送信するデータ =

「外部サービスについて」の項を参照してください。基本的に、明示的なユーザー操作 (郵便番号検索ボタンの押下) なしには一切の外部送信は発生しません。

= データの削除 =

* 個別の送信データは、回答一覧画面から削除できます
* プラグイン削除時は、デフォルトですべてのデータ (テーブル・オプション・プレビューページ) がクリーンアップされます
* GDPR 等の観点から削除要求があった場合、回答一覧で該当レコードを検索して削除してください

= cookie の使用 =

このプラグインは独自の cookie を設定しません。

== Credits ==

* アイコン: [Font Awesome Free 6.5.1](https://fontawesome.com/) (Icons: CC BY 4.0 / Fonts: SIL OFL 1.1 / Code: MIT) — プラグインにバンドルして配布
* 郵便番号 API: [Zipcloud](https://zipcloud.ibsnet.co.jp/) by 株式会社アイビス
