操作
Backport(バックポート) #4051
完了「全メンバーをコミュニティ参加させる」リンクによって招待済みで登録していないメンバが登録できなくなる場合がある
開始日:
2016-11-15
期日:
進捗率:
100%
予定工数:
説明
概要¶
「全メンバーをコミュニティ参加させる」リンクによって招待済みかつ登録していないメンバが登録できなくなる場合がある.
また,そのようなメンバに対してさらに招待を送ると招待時にホワイトアウトする場合がある.
詳しくは下記のような複数のバグにより上記現象が発生する.
- 「全メンバーをコミュニティ参加させる」リンクによって招待済みで登録していない(is_active=0)のメンバが参加してしまう
- 新規登録完了処理時に初期コミュニティにすでに参加している場合に投げられた例外が拾われずに登録処理の途中で停止する
- 招待時にプロフィールが登録されており is_active=0 となるようなメンバのメールアドレスを指定した場合に同じメンバで pc_address と pc_address_pre に同じメールアドレスが登録される場合があり,このような状態になった時にそのメールアドレスを含んだ招待を行おうとするとホワイトアウトする.
これら問題について,どのメールアドレスあるいはメンバに問題が発生しているかが Web インタフェース上では判別不能のためユーザがこの問題の認識および解決を行うことは困難である.
発生バージョン¶
OpenPNE 3.8.9
OpenPNE 3.6.13
原因¶
複数の不具合を含んでいるが問題発生の起点となるものは『「全メンバーをコミュニティ参加させる」リンクによって招待済みで登録していない(is_active=0)のメンバが参加してしまう』という問題のためその原因について記述する.
#927 修正時に Doctrine のオブジェクトによるクエリ発行から SQL によるクエリ発行に変更された際に opActivateBehavor を考慮したクエリが発行されなくなった. master ではその後 メソッド抽出からの修正が行われているため本問題は発生しない.
修正案¶
- #927 の修正のように is_active について考慮したクエリを発行するように修正する
- また すでに is_active=0 のメンバがコミュニティに参加してしまっている場合を考慮して新規登録完了時の already join の例外を適切に処理して登録を完了できるようにする
- すでに複数のメンバあるいは同メンバ無いで pc_address および pc_address_pre (または mobile のそれ)について複数で同じメールアドレスが登録されているメンバについてはそのデータを削除する
操作