WordCamp Haneda 2019 に参加し登壇しました

はじめに

4月20日(土)のセッションデイのみ参加し登壇しました。昨年の WordCamp Osaka 2018 以来の方、ネットでの知り合いでしたが初見の方、人から紹介された方、こちらから話しかけた方等、複数の方と知り合いになり、いろいろとお話しし有意義な1日を過ごしました。

登壇ですが、今回スライド内のコードをポインターで指しながら発表しました。以下にスライドを共有しますが、スライド内に説明がほとんど書いてなく、また、発表の動画を見てもわかりづらいかもしれないと思いました。補足説明の必要性を感じましたので、以下で説明させていただきます。

補足説明

12ページ 予選

実際の画面です。この例ですと1ヒートに12~13組踊ります。画面の下に6ヒートがあります。審査員が、通過者をチェックしていきます。出場74組中48組をピックアップします。注意すべきは、ヒート毎に選ぶのではなく全体で選ぶというのが公式のルールです。最後のヒートが終わった後に、アップ数があっていなければならないので、審査員が数合わせができるように、気になった選手の印し用にタップすると黄色になるようにしました。もし数が合わなければ黄色のところにチェックをするという仕組みです。赤文字のカウントは現在チェックしている数です。アップ数の48以外は赤になり、また48にならなければ送信ボタンが現れない仕組みにしました。

15ページ 決勝

上段番号が背番号、下段が順位です。下段をスワイプして順位を確定します。重複状況が赤で表示されます。重複が無くなると送信ボダンが表示され送信できます。

21ページ 登録直後の通知メール

実際にプラグインを動作させて、登録するとこの様なメールが届くしくみです。「複数のユーザーが以下の様に追加されました。」というメッセージ以降にユーザー名とパスワードリセットリンクが複数追加されます。

22ページ 管理画面とデーターベースの確認

実際に管理画面と、データーベースを確認してみると、メールアドレスが全て同じになっているのがわかります。

23ページ プラグインの管理画面

親ユーザーと子ユーザーという概念を導入しました。登録する親ユーザーには、採点システムを管理する独自の権限グループを与え、審査員端末のユーザーには購読者の権限グループを与えました。新規ユーザーのデフォルト権限グループは親ユーザーの権限と合わせなければなりません。また、子ユーザーの追加数を課金システムと連動させるために2種類用意しました。

24ページ 採点システム側の登録時

action_add_user 関数を、user_register にフックしています。親ユーザーの登録があったら、登録を締め切ります。また6日間でアカウントを削除する BdcScoringAcountHook にフックしています。

25ページ Add Multiple User 側の登録時

登録時のフックに対応する関数です。親ユーザーのデフォルト権限で登録した場合に、auto_insert_users 関数を実行します。

26ページ 複数ユーザーの登録とメール通知

パラメータとして、親ユーザーのメールアドレス、ユーザー追加カウント最小数、ユーザー追加カウント最大数、ユーザー名の接頭辞、子ユーザーの権限を持ちます。まずユーザー数だけループさせて、wp_insert_user 関数で登録します。その登録 ID を配列に入れておきます。次に、登録 ID の配列をループさせて、wpdb でそれぞれの子ユーザーの users テーブルのメールアドレス欄に親ユーザーのメールアドレスを書き込みます。

27ページ 審査員端末のパスワードリセットを試す

実際にうまく動作するか、ログイン画面の「パスワードをお忘れですか?」リンクから、子ユーザーである審査員端末のパスワードリセットを試しました。無事に親ユーザーであるオペレーターアカウントのメールアドレスにパスワードリセットリンクの入ったメールが配信されました。

29ページ 課金による端末(ユーザー)追加

実際の画面です。上部は、5端末で無料の画面で Stripe で課金します。下部は、課金後の画面です。課金用の画面が無くなり、22端末まで利用可能になっているのがわかります。

30ページ 課金による端末(ユーザー)追加の通知

実際のメール通知はこのようになります。この場合は、以前の5ユーザーに17ユーザー追加され合計22ユーザーまで拡張されます。

31ページ 採点システム側の課金時

simple_stripe_payment_charge、 simple_pyapal_payment_charge というフィルターをプラグイン側で用意しました。このフィルターは課金が成功した場合に動作します。また、Stripe, PayPal ボタンのショートコードをプラグイン側で用意しました。このボタンを押すと課金画面が現れます。フィルターを、paypal_charge、 stripe_charge という関数にフックさせます。それらの関数の中で、Add Multiple User で用意したアクションフック amu_paid_add_user を呼び出します。アクションフックが呼び出されると、設定しておいた子ユーザーの課金済みの追加数を追加する仕組みです。

33ページ 採点システム側の削除時

親ユーザー登録時に6日で登録しておいたフック、BdcScoringAcountHook が動作した時に、delete_data_account 関数が呼び出され、親ユーザーのアカウントが削除されます。ここには書いてありませんが、親ユーザーを削除すると子ユーザーも一括削除される仕組みになっています。 action_delete_user 関数は、delete_user にフックしていて親ユーザーが削除された時に動作します。users_can_register オプションを TRUE に戻し外部から登録できるようにします。 念のために BdcScoringAcountHook をクリアしています。

34ページ その他の Web サービスとしての機能

同じ審査員のアカウントで採点はできないので、重複ログインの禁止は必須です。Ban Double Login は、Facebook で流れていたのを思い出して、使用してみたところ、用途にピタリとあったので採用しました。

Locale Auto Switch は、ブラウザの言語設定で WordPress の言語を切り替えます。

セキュリティ対策は、Loginizer の他にファイルのパーミッションや.htaccessファイルなどに施しています。

パスワードリセット対策は、パスワードの入力の間違いを軽減させるものです。オペレーターアカウントのPCのブラウザと審査員端末のブラウザの同期ができれば問題ないのですが、そうで無い場合の方が多いです。その際にパスワードを直接入力する事になります。たいていのユーザーは推奨されたパスワードを使用するはずです。その際にエルの小文字とアイの大文字とか、オーの大文字とゼロとかを間違えて何度もパスワードリセットを繰り返すというヒューマンエラーが起こりやすく非常なストレスになります。それらの間違えやすい文字をパスワードリセット画面から除外するプラグインです。

終わりに

セッションを聴きに来てくださった方々ありがとうございました。また実行委員長の又川さん他、実行委員、当日スタッフの皆様、本当にお疲れ様でした。そして、ありがとうございました。