Bug(バグ) #1707
Did not consider the waiting for approval of community participation(マイホームのコミュニティ参加数が承認待ちを考慮していない)
100%
説明
Overview (現象)¶
承認が必要なコミュニティに参加申請している場合に、
リストに表示されていないにも関わらずカウントされてしまう。
Causes (原因)¶
Doctrineのリレーション情報から member_id が一致する CommunityMember のレコードを取得しており、
community_member.is_pre を考慮していないことが原因です。
また、 レコードの取得後にカウント処理を行っているため、速度面でも問題があります。
$member->CommunityMember->count()
Way to fix (修正内容)¶
Member クラスに is_pre を考慮して Doctrine_Query::count() を行うメソッドを追加して置換する。
関連するチケット
関係しているリビジョン
fixed the pre-member included to counted of the join-communities (fixes #1707)
fixed initialize a cache variable(fixes #1707)
履歴
#1 Masato Nagasawa が13年以上前に更新
- ステータス を New(新規) から Accepted(着手) に変更
- 担当者 を Masato Nagasawa にセット
#2 Masato Nagasawa が13年以上前に更新
- 題名 を マイホームのコミュニティ参加数が承認待ちを考慮していない から Did not consider the waiting for approval of community participation(マイホームのコミュニティ参加数が承認待ちを考慮していない) に変更
#3 Masato Nagasawa が13年以上前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 5c075f4d0183414e5249e38bf9f82b99105df354 で適用されました。
#4 Shinichi Urabe が約13年前に更新
- ステータス を Pending Review(レビュー待ち) から Rejected(差し戻し) に変更
false === $cache にする必要があります。コーディング規約違反です 修正をお願いします
345 if ($cache === false)
false をいれて型が変わるのが、不自然なので、null を代入してください
#5 Masato Nagasawa が約13年前に更新
- ステータス を Rejected(差し戻し) から Pending Review(レビュー待ち) に変更
更新履歴 5183a6775b6105ee59ea12312625ee5aedc1dd88 で適用されました。
#6 Kousuke Ebihara がほぼ13年前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
#7 Minoru Takai がほぼ13年前に更新
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
コードチェック¶
public function countJoinCommunity() { static $cache = null; if (is_null($cache)) { $cache = Doctrine::getTable('CommunityMember')->createQuery() ->where('member_id = ?', $this->getId()) ->andWhere('is_pre = ?', false) ->count(); } return $cache; }
このようなメソッドを定義し、
- is_pre (承認待ちコミュニティを除外すること)を考慮した
- $member に紐づく CommunityMember の Doctrine_Collection に対する count() を行わなずに、 Doctrine_Query::count() で count() の値を得るようにした
- 一度の表示(この表現は適切ではないかもしれません)で countJoinCommunity() が複数回呼ばれたときに、呼ばれる都度 DB を参照せず、初回に得た結果を使い回すように $cache を定義して使っている
これらを実現しているこの関数の実装は問題ないと思います。
動作テスト¶
apps/pc_frontend/modules/community/templates/_joinListBox.php が呼ばれるページ(マイホーム)で、修正前のコードでは自身が参加しているコミュニティ数(コミュニティリスト下部のリンク「全てを見る(10)」の括弧内の部分)が承認待ちのものも含まれており、修正後にはこれが排除されていることを確認しました。
修正内容を見ても、副作用などはなく、適切な修正であると判断できます。
完了とします。