操作
Bug(バグ) #1707
完了Did not consider the waiting for approval of community participation(マイホームのコミュニティ参加数が承認待ちを考慮していない)
開始日:
2010-10-19
期日:
進捗率:
100%
予定工数:
3.6 で発生するか:
Yes
3.8 で発生するか:
説明
Overview (現象)¶
承認が必要なコミュニティに参加申請している場合に、
リストに表示されていないにも関わらずカウントされてしまう。
Causes (原因)¶
Doctrineのリレーション情報から member_id が一致する CommunityMember のレコードを取得しており、
community_member.is_pre を考慮していないことが原因です。
また、 レコードの取得後にカウント処理を行っているため、速度面でも問題があります。
$member->CommunityMember->count()
Way to fix (修正内容)¶
Member クラスに is_pre を考慮して Doctrine_Query::count() を行うメソッドを追加して置換する。
Masato Nagasawa さんが約14年前に更新
- ステータス を New(新規) から Accepted(着手) に変更
- 担当者 を Masato Nagasawa にセット
Masato Nagasawa さんが約14年前に更新
- 題名 を マイホームのコミュニティ参加数が承認待ちを考慮していない から Did not consider the waiting for approval of community participation(マイホームのコミュニティ参加数が承認待ちを考慮していない) に変更
Masato Nagasawa さんが約14年前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 5c075f4d0183414e5249e38bf9f82b99105df354 で適用されました。
Shinichi Urabe さんがほぼ14年前に更新
- ステータス を Pending Review(レビュー待ち) から Rejected(差し戻し) に変更
false === $cache にする必要があります。コーディング規約違反です 修正をお願いします
345 if ($cache === false)
false をいれて型が変わるのが、不自然なので、null を代入してください
Masato Nagasawa さんがほぼ14年前に更新
- ステータス を Rejected(差し戻し) から Pending Review(レビュー待ち) に変更
更新履歴 5183a6775b6105ee59ea12312625ee5aedc1dd88 で適用されました。
Kousuke Ebihara さんが13年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
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)」の括弧内の部分)が承認待ちのものも含まれており、修正後にはこれが排除されていることを確認しました。
修正内容を見ても、副作用などはなく、適切な修正であると判断できます。
完了とします。
操作