=== Probono Booking Basic ===
Contributors: probonodesign
Plugin URI: https://bk.prbn.org
Tags: booking, reservation, form, calendar, japanese
Requires at least: 6.0
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.0.7
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

コード不要、カレンダーで日時を選ぶだけの予約フォーム。日本語サイトのための Made in Japan 予約プラグイン。

== Description ==

Probono Booking は、日本語サイトのために設計・開発された予約フォームプラグインです。ボタンを押すだけで、簡単に予約システムが完成します。

== Probono Booking を選ぶ理由 ==

* **Made in Japan** - 日本のウェブ予約システムを理解した日本人開発者が開発
* **買い切り** - 月額課金なし、追加料金なし
* **日本語最適化** - 祝日・振替休日・国民の休日を自動反映
* **軽量・高速** - 最小限のコードで最適なパフォーマンス

== 無料機能 ==

**予約基本機能**

* カレンダー UI による日時・スロット選択
* 1スロットあたりの同時予約数上限
* リアルタイム空き状況表示

**フォーム項目**

* 13種類の組込フィールド（pb1〜pb13：氏名・フリガナ・メール・電話・郵便番号・住所・メニュー選択・カレンダー・備考・チェックボックス・ラジオボタン・ファイル送信・利用規約同意）
* 必須項目設定
* 11業種別テンプレート：美容室・飲食店・クリニック・弁護士・税理士・不動産・宿泊施設・採用・ペット・ハウスクリーニング・カウンセリング

**メール機能**

* お客様への予約確認メール
* 管理者への予約通知メール
* リマインドメール自動送信（予約日の前日）
* 本文・署名をカスタマイズ可能な自動返信メール

**カレンダー設定**

* 日本の国民の休日を自動反映
* 定休日・臨時休業日
* 営業時間設定
* 受付期間（何日先まで予約を受け付けるか）

**データ管理**

* 予約データの CSV エクスポート
* iCal エクスポート（Google カレンダー対応）
* ファイルベースの自動バックアップ（最大1500件の履歴保持）
* 任意のバックアップ時点へのワンクリック復元

**その他**

* スマホ・PC 対応のレスポンシブデザイン
* 送信中のローディング表示
* 二重送信防止

== Installation ==

1. プラグイン > 新規追加 > プラグインのアップロード から ZIP ファイルをアップロード
2. プラグイン一覧から「有効化」
3. 管理画面メニュー「Probono Booking」を開く
4. 新規フォームを作成し、ショートコードを固定ページに挿入

== Frequently Asked Questions ==

= 日本語サイト向けですか？ =

はい。Probono Booking は日本語サイト向けに設計・最適化されています。インターフェース・項目ラベル・祝日処理・メールテンプレートはすべて日本のビジネス利用に合わせて調整されています。

= Made in Japan ですか？ =

はい。Probono Booking は、日本のウェブ予約システムの慣習や期待を理解した日本人開発者によって開発されています。

= 他の予約プラグインと併用できますか？ =

Probono Booking は単独で動作するスタンドアロン型のプラグインで、他の予約プラグインに依存しません。同じページで複数の予約プラグインを動作させると CSS やスクリプトの競合が発生する場合があるため、サイトでは1つの予約プラグインのみのご利用を推奨します。

= どの WordPress テーマでも使えますか？ =

はい。スコープを絞った CSS とコンテナ化されたフォームでレンダリングするため、ほとんどのモダンな WordPress テーマでレイアウト崩れなくご利用いただけます。

= 月額費用はかかりますか？ =

かかりません。本プラグインは買い切り型で、定期的な費用は発生しません。

= 予約データはどこに保存されますか？ =

ご自身のサイトの専用データベーステーブルに保管されます。予約データが外部に送信されることはありません。プラグインから外部への HTTP 通信は一切発生しません。

= 日本の国民の休日には対応していますか？ =

はい。祝日・振替休日・国民の休日（祝日と祝日の間の平日）を予約カレンダーへ自動的に反映します。

= このプラグインはユーザーデータを収集しますか？ =

いいえ。Probono Booking が個人情報を外部サービスへ送信することはありません。フォームから送信された予約データは、ご自身の WordPress データベース内にのみ保管されます。プラグインから外部への HTTP 通信は一切なく、日本の祝日はローカルで算出します。

== Changelog ==

= 1.0.7 =
* 予約フォームから入った予約が管理画面のカレンダーに表示されず、リマインドメールも送信されない問題を修正しました。予約日の保存形式を統一し、旧形式（「2026年7月8日」など）で保存済みの既存予約もそのまま正しく読み込みます。メール内の日付表記は従来どおり和式（YYYY年M月D日）です。
* 海外（UTCより西のタイムゾーン）から予約すると選択した日付が1日ズレる問題を修正しました。
* ファイル送信フィールドで、添付されたファイルが実際に送信されるようになりました。サイズ上限と対応形式を検証したうえで、管理者への予約通知メールに添付して届けます。これまではファイル名の文字列だけが送られていました。
* 予約管理画面の「受付中/受付停止中」切替が実際に予約を停止するようになりました。停止中は予約フォームの代わりに案内文を表示し、フォームを経由しない直接送信も受け付けません。
* 意図的に空欄にした設定が定型文にすり替わる問題を全体的に修正しました。自動返信の本文冒頭・末尾（自由入力＋空欄）、確認画面のタイトル・メッセージ・ボタン名・完了/失敗メッセージ、受信メール件名、自動返信の件名、受付時間・休業日設定の見出しラベルが、空欄のまま管理画面プレビューと同じ内容で反映されます。
* 受信メール件名が「変更する」チェックに従うようになりました。チェックがオフのときは、以前に保存した独自件名ではなく、現在のサイト名から自動生成した既定の件名を使います。
* 備考・要望欄のカスタムラベルが、管理画面プレビューと同じく予約フォームの見出しとして表示されるようになりました。これまでは入力欄の薄字（プレースホルダー）に入っていました。
* 必須のチェックボックス項目で、どの選択肢をチェックしても送信できるようになりました。これまでは1番目の選択肢だけが必須扱いだったため、2番目以降だけをチェックすると送信できませんでした。
* 過去の日付、および当日のすでに過ぎた時間帯を選択・送信できないようにしました。
* 送信処理を堅牢化しました。細工したデータを直接送信された場合も PHP 8 でエラーにならず安全に拒否し、隠しタイムスタンプを省略してボット対策の速度チェックを回避することもできなくなりました。
* 削除済みフォームへの保存で、不完全なフォームが知らないうちに再作成される問題を修正しました。
* 予約データへのすべての書き込み（新規予約・ステータス変更・削除・バックアップ復元・リマインド送信記録）を同一のロックで直列化し、書き込み直前に最新データを読み直すようにしました。同じ瞬間に入ったフロントの予約が、管理操作やリマインド処理の書き戻しで消えてしまう可能性をなくしました。
* 管理者への予約通知メールを、満席の最終判定と予約の保存が完了した後に送るようにしました。これまでは最終判定より先に送信していたため、直前で満席拒否された予約の通知だけが管理者へ届くことがありました。通知メールの送信に失敗した場合は、従来どおり予約を取り消してお客様に再試行をお願いします。
* キャンセル済みの予約にリマインドメールが送られないようにしました。
* 予約通知メールに Reply-To（お客様のメールアドレス）を付与しました。メールソフトでそのまま返信するとお客様に届きます。
* 新機能: 曜日別の受付時間帯を追加しました。休業日設定の各曜日で受付の開始・終了時刻を個別に設定できます（例: 水曜だけ夜間受付）。空欄の曜日は従来どおり全体の受付時間を使うため、既存の設定はそのまま動作します。
* 受信メール・自動返信のプレビューを実際に送信されるメールと完全に一致させました（冒頭文・予約日/予約時間の行・受付日時・「様」の有無）。確認画面のプレビューも実際の画面と一致します。
* 予約管理カレンダーがステータス変更・削除の直後に最新表示へ更新されるようになりました。保存に失敗した場合は変更前のステータスに戻ります。フォーム管理カードでのフォーム名変更が保存されるようになりました。どの設定タブでもフォーム切替時に前のフォームの設定が画面に残らないようにしました。そのほか、送信失敗時にフォームへ戻るボタン、選択できる時間が無い場合の案内表示、最終枠が受付終了時刻を超えない挙動の統一、祝日データの受付期間全体への対応、CSVの日付・ファイル名のサイト時刻化と表計算ソフト対策など、細かな改善を行いました。

= 1.0.6 =
* フォーム管理タブで「編集」を押さずに、上部の主タブから設定タブ（フォーム設定・確認画面設定・受信メール設定・自動返信設定）を直接開いた場合に、保存バー（フォーム名・保存ボタン・ショートコード表示）が出ず、設定の変更が保存されない問題を修正しました。設定タブを開くと編集対象のフォームが自動で選択され、保存ボタンが常に表示されて変更が確実に保存されます。

= 1.0.5 =
* ご希望の日時が予約上限に達していた場合にお客様へ表示するメッセージを、管理画面（フォーム設定のカレンダー内「予約上限時メッセージ」）から自由に変更できるようにしました。空欄の場合は標準の文言を表示します。
* 二重予約を防ぐ仕組みを追加しました。予約上限まで埋まった日時への予約は、予約フォームを通さない直接送信も含めて受け付けません。複数のお客様が同時に予約した場合でも上限を超えて受け付けることはありません。キャンセルされた予約は枠を空け、第2希望以降の日時は枠を消費しません。
* 曜日ごとの休業日設定を作り直しました。曜日ごとに全日休・午前休・午後休を選べ、空欄（ー）のままにすると営業日になります。休憩時間は休業設定のある曜日にのみ適用され、営業日の曜日は休憩時間の入力欄が使えないことがひと目で分かる表示になります。見出しの名前も自由に変更できます。
* 予約フォームの時間の選択肢が、設定した受付時間・刻み幅どおりに表示されず、1つしか表示されないことがある問題を修正しました。設定した受付時間が予約フォームに反映されない原因を取り除きました。
* 保存したはずの受付時間などの設定が、別の設定タブでの操作や再保存をきっかけに古い内容へ巻き戻ってしまう問題を修正しました。各設定画面は自分の担当分だけを保存するようにし、他の画面で保存した内容を古い情報で上書きする経路をなくしました。
* 確認画面・受信メール・自動返信の各設定が、保存したのに画面には初期値が表示され、そのまま初期値で上書き保存されてしまう問題を修正しました。保存済みの内容を画面へ正しく読み込むようにしました。
* 設定の文章に入力した改行が、保存すると消えてしまう問題を修正しました。
* フォームを続けて切り替えると直前の変更が保存されないことがある問題を修正しました。変更が自動保存される旨の案内を管理画面に分かりやすく表示し、自動保存と手動保存が重なっても正しく保存されるようにしました。
* 曜日ごとの入力欄の名前を、実際の働きに合わせて「休憩時間」に改めました。以前は「受付時間」と表示されていたため、ここに営業時間を入力してしまうとその時間帯が予約できなくなる紛らわしさがありました。
* 予約フォームで日付を選んだ際は、時間の選択を必須にしました。以前は日付だけ選んで時間を選ばないまま送信できてしまいました。
* リマインドメールが送信に失敗しても送信済み扱いとなり、再送されなくなる問題を修正しました。送信に成功したときだけ送信済みになります。

= 1.0.4 =
* 変更履歴の表記をわかりやすく簡略化しました。機能の変更はありません。

= 1.0.3 =
* WordPress 7.0 との互換性を確認。
* 管理画面にマニュアルタブを追加（bk.prbn.org の公式マニュアルへリンク）。
* プラグインヘッダに Requires at least / Tested up to / Requires PHP を明記。
* 予約・カレンダー・メール・管理画面の挙動に機能変更はなし。

= 1.0.2 =
* WordPress.org プラグイン審査に向けたさらなる内部的な改善を行いました。既存の環境は自動で更新され、保存済みの予約データもそのまま引き継がれます。お客様側で行っていただく作業はありません。

= 1.0.1 =
* WordPress.org プラグイン審査に向けた内部的な改善を行いました。既存の環境は自動で更新され、保存済みの予約データもそのまま引き継がれます。お客様側で行っていただく作業はありません。

= 1.0.0 =
* 初回リリース。
* 祝日データをローカル算出方式に切替、外部 API 依存を撤廃。

== Upgrade Notice ==

= 1.0.7 =
曜日別受付時間帯の追加、予約が管理カレンダーに表示されない・リマインドが送信されない問題の修正、ファイル添付の実装、受付停止切替の有効化、空欄設定の尊重、予約データ書き込みの堅牢化などを行いました。更新を強く推奨します。

= 1.0.6 =
編集対象フォームを選ばずに設定タブを開くと保存ボタンが出ず設定が保存されない問題を修正しました。更新を推奨します。

= 1.0.5 =
二重予約防止と予約上限時メッセージの変更機能を追加し、休業日設定を作り直したほか、設定保存と時間表示の不具合を修正しました。更新を推奨します。

= 1.0.4 =
ドキュメントの表記をわかりやすく簡略化しました。機能の変更はありません。

= 1.0.3 =
WordPress 7.0 互換性を確認。マニュアルタブを管理画面に追加しました。

= 1.0.2 =
WordPress.org プラグイン審査に向けたさらなる内部的な改善。既存環境は自動で更新され、保存済みの予約データはそのまま引き継がれます。

= 1.0.1 =
WordPress.org プラグイン審査に向けた内部的な改善。既存環境は自動で更新され、保存済みの予約データはそのまま引き継がれます。

= 1.0.0 =
初回リリース。
