プロジェクト

全般

プロフィール

Bug(バグ) #1707

完了

Did not consider the waiting for approval of community participation(マイホームのコミュニティ参加数が承認待ちを考慮していない)

Masato Nagasawa さんが約14年前に追加. 13年以上前に更新.

ステータス:
Fixed(完了)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
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() を行うメソッドを追加して置換する。


関連するチケット 2 (0件未完了2件完了)

関連している OpenPNE 3 - Backport(バックポート) #1795: Did not consider the waiting for approval of community participation(マイホームのコミュニティ参加数が承認待ちを考慮していない)Fixed(完了)Masato Nagasawa2010-10-19

操作
関連している OpenPNE 3 - Backport(バックポート) #1794: Did not consider the waiting for approval of community participation(マイホームのコミュニティ参加数が承認待ちを考慮していない)Fixed(完了)Masato Nagasawa2010-10-19

操作

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)」の括弧内の部分)が承認待ちのものも含まれており、修正後にはこれが排除されていることを確認しました。

修正内容を見ても、副作用などはなく、適切な修正であると判断できます。

完了とします。

他の形式にエクスポート: Atom PDF