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