最近、イベント告知サイトがいろいろと増えてますが、そういったものもMovable Typeで作れるなと思い取りあえず作ってみた。まぁ、突っ込みどころはたくさんあるのでしょうが、取りあえずサンプルというかテストという感じで作ってみました。
サイトの使い方としては下記のような感じで考えて作りました。機能としては最低限という感じです。
- イベントの登録はカスタムフィールドを使ってデータ登録する
- MTのコメント機能を使ってイベント参加者を募集
- イベント参加者のデータはCSVファイルでダウンロードできる。
イベント告知、参加者募集と言うことで募集期限や募集人数の設定をカスタムフィールドで、メールアドレスで重複登録のチェックを簡易的にしています。表面的な簡易機能なので、条件によっては募集人数を超えて登録できてしまいますが、応募が殺到しないかぎり機能すると思います。
応募者のデータをCSVでダウンロードするのは、コメント欄に入力されたデータをエントリー・アーカイブにカンマ区切りで書き出しているだけなのですが、書き出したものをサーバーに置いておくことになるので、パスワードを掛けないわけにはいかないですよね。
そこで、このCSVファイルはエントリーごとにディレクトリを作って、同時に.htaccessと.htpasswdファイルもそこに書き出してディレクトリにベーシック認証を掛けてます。
この時のパスワードはイベントの登録の際にカスタムフィールドでCSVダウンロード用のパスワードを入力してもらっているのですが、ベーシック認証のパスワードは暗号化されたものを.htpasswdに書き込まないとなりません。
そのため、当初は下記の画像のようにパスワードの暗号化スクリプトを使って暗号化したパスワードを入力するように想定していました。
この方法ですとイベントを登録する人によっては、ハードルが高くなってしまいます。なるべく、誰でも使えるようにするには暗号化の手順は省いたほうがいいですが、MTには暗号化する機能はないので外部のスクリプトやサービスに頼る必要がありました。
ところが、先日、公開されたプラグイン「mt-htpasswd」を使うことで、この暗号化という手順を省けるようになりました。ダウンロードは下記のページより出来ます。
ダウンロード:mt-htpasswd
カスタムフィールドに入力してもらったパスワードを使って.htpasswdを書き出すのに以下のようなテンプレートを作成しました。
<mt:SetVarBlock name="authorid"><$mt:AuthorID$></mt:SetVarBlock>
<mt:SetVarBlock name="csvpassword"><mt:EntryDataCsvpassword /></mt:SetVarBlock>
<mt:Authors id="$authorid"><mt:AuthorBasename></mt:Authors>:<mt:If tag="EntryDataCsvpassword"><mt:htpasswd string="$csvpassword"><mt:Else><$mt:EntryModifiedDate$></mt:If>
以下のように書き出されます。
ユーザーベースネーム:暗号化されたパスワード
3行目にある以下の部分でカスタムフィールドのCSVファイルダウンロード用パスワード[EntryDataCsvpassword]に入力したパスワードを暗号化して書き出しています。
<mt:If tag="EntryDataCsvpassword"><mt:htpasswd string="$csvpassword"><mt:Else><$mt:EntryModifiedDate$></mt:If>
※ <mt:Else><$mt:EntryModifiedDate$>はCSVファイルダウンロード用パスワードが未入力の場合の対策です。
このテンプレートをエントリー・アーカイブとして作成しています。MTイベント告知では.htaccessファイル、.htpasswdファイル、応募者データのCSVファイル、CSVファイルへのリンクを表示させるHTMLファイルをエントリーごとのディレクトリにまとめて入れてあります。
ベーシック認証が掛かったディレクトリに書き出されるファイル
- .htaccessファイル
- .htpasswdファイル
- 応募者データのCSVファイル
- CSVファイルへのリンクを表示させるHTMLファイル
ログインした状態でイベント記事にアクセスすると右上に「CSVダウンロード」と言うリンクが表示されているので、このリンクをクリックするとユーザー名とパスワードが要求され、認証が通ると先ほどのCSVファイルへのリンクを表示させるHTMLファイルにアクセスするようになっていて、そこからCSVをダウンロード出来ます。
あと、登録情報やパスワードのやり取りをするので、通信はhttpsで行うことが必要だと思います。