Project

General

Profile

Bug(バグ) #1707

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

Added by Masato Nagasawa almost 9 years ago. Updated about 8 years ago.

Status:
Fixed(完了)
Priority:
Normal(通常)
Target version:
Start date:
2010-10-19
Due date:
% Done:

100%

3.6 で発生するか:
Yes
3.8 で発生するか:
Unknown (未調査)

Description

Overview (現象)

承認が必要なコミュニティに参加申請している場合に、
リストに表示されていないにも関わらずカウントされてしまう。

Causes (原因)

Doctrineのリレーション情報から member_id が一致する CommunityMember のレコードを取得しており、
community_member.is_pre を考慮していないことが原因です。
また、 レコードの取得後にカウント処理を行っているため、速度面でも問題があります。

$member->CommunityMember->count()

Way to fix (修正内容)

Member クラスに is_pre を考慮して Doctrine_Query::count() を行うメソッドを追加して置換する。


Related issues

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

Associated revisions

Revision 5c075f4d (diff)
Added by Masato Nagasawa almost 9 years ago

fixed the pre-member included to counted of the join-communities (fixes #1707)

Revision 5183a677 (diff)
Added by Masato Nagasawa over 8 years ago

fixed initialize a cache variable(fixes #1707)

History

#1 Updated by Masato Nagasawa almost 9 years ago

  • Status changed from New(新規) to Accepted(着手)
  • Assignee set to Masato Nagasawa

#2 Updated by Masato Nagasawa almost 9 years ago

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

#3 Updated by Masato Nagasawa almost 9 years ago

  • Status changed from Accepted(着手) to Pending Review(レビュー待ち)
  • % Done changed from 0 to 50

更新履歴 5c075f4d0183414e5249e38bf9f82b99105df354 で適用されました。

#4 Updated by Shinichi Urabe over 8 years ago

  • Status changed from Pending Review(レビュー待ち) to Rejected(差し戻し)

false === $cache にする必要があります。コーディング規約違反です 修正をお願いします

345         if ($cache === false)

false をいれて型が変わるのが、不自然なので、null を代入してください

#5 Updated by Masato Nagasawa over 8 years ago

  • Status changed from Rejected(差し戻し) to Pending Review(レビュー待ち)

更新履歴 5183a6775b6105ee59ea12312625ee5aedc1dd88 で適用されました。

#6 Updated by Kousuke Ebihara about 8 years ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

#7 Updated by Minoru Takai about 8 years ago

  • Status changed from Pending Testing(テスト待ち) to Fixed(完了)
  • % Done changed from 70 to 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)」の括弧内の部分)が承認待ちのものも含まれており、修正後にはこれが排除されていることを確認しました。

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

完了とします。

Also available in: Atom PDF