ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Opened 10 years ago

Closed 10 years ago

#3484 closed defect (fixed)

ホーム表示時にplugins/opBlogPlugin/lib/model/BlogPeer.phpエラー

Reported by: tsukamoto Owned by: nagasawa
Priority: major Milestone: OpenPNE3.0.0
Component: plugins Version: 3.0.x
Keywords: opBlogPlugin Cc:

Description

OpenPNE3 rev.10451で、自分が招待して未登録の人がいる時、ホームを開こうとすると以下のエラーが発生します。

Fatal error: Call to a member function getConfig() on a non-object in
C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\OpenPNE3
\plugins\opBlogPlugin\lib\model\BlogPeer.php on line 57

該当行を含むメソッドgetBlogListByMemberId($member_id, &$list)に$member_id=2が渡ってきており、これは招待を出した、未登録の人でした。この時、以下の部分で、まずMemberPeer::retrieveByPk($member_id)が失敗し、それをケアせずに次行でオブジェクトメソッドを呼ぼうとしてエラーになっているようです。

 public static function getBlogListByMemberId($member_id, &$list)
 {
   $member = MemberPeer::retrieveByPk($member_id);
   $root = self::getXmlByUrl($member->getConfig('blog_url'));

$memberが空の時にreturnさせれば、期待通りの動きではないかと思います。rev.10451用のパッチを添付します。

Attachments (1)

BlogPeer.php.rev10451.diff (554 bytes) - added by tsukamoto 10 years ago.

Download all attachments as: .zip

Change History (7)

Changed 10 years ago by tsukamoto

Attachment: BlogPeer.php.rev10451.diff added

comment:1 Changed 10 years ago by tsukamoto

追記ですが、member_relationshipを見てみると、招待しただけのメンバーとの関係で、is_friend_preではなくis_friendが1になっていました。

mysql> select member_id_to, member_id_from, is_friend, is_friend_pre
    -> from member_relationship;
+--------------+----------------+-----------+---------------+
| member_id_to | member_id_from | is_friend | is_friend_pre |
+--------------+----------------+-----------+---------------+
|            2 |              1 |         1 |             0 |
|            1 |              2 |         1 |             0 |
+--------------+----------------+-----------+---------------+

もしかするとBlogの取得でエラーになることより、ここでis_friendが1にセットされているのがおかしいのかもしれません。その場合、上記箇所及びパッチの問題ではなく、plugins/opInviteFriendPlugin/lib/model/InviteFriendPeer.phpの以下の個所の最後の行がおかしいということになるかもしれません。

  public static function getNotFriendMembers($send_id, $target_id)
  {
    $relations = MemberRelationshipPeer::retrievesByMemberIdFrom($send_id);
    $c = new Criteria();
    $c->add(MemberRelationshipPeer::MEMBER_ID_FROM, $send_id);
    $c->add(MemberRelationshipPeer::MEMBER_ID_TO, $target_id, Criteria::NOT_EQUAL);
    $c->add(MemberRelationshipPeer::IS_FRIEND, true);

どちらが正しいのか、ここは設計の決めの問題ですので、ご判断ください。

comment:2 Changed 10 years ago by ebihara

Milestone: OpenPNE3.0beta4
Version: 3.0.x

ご報告ありがとうございます、確認します。

member_relationship の is_friend が 1 になっているのは正しい挙動です。

招待者と新規登録者はSNS登録時からフレンド関係にある必要があるため、このような状態になっています。 is_friend が 1 であったとしても、新規登録者の member.is_active が 0 であるため、問題にはなりません。

comment:3 Changed 10 years ago by ogawa

Milestone: OpenPNE3.0beta4

Milestone OpenPNE3.0beta4 deleted

comment:4 Changed 10 years ago by ogawa

Component: 指定しないplugins
Keywords: opBlogPlugin added
Milestone: OpenPNE3.0.0
Priority: minormajor

comment:5 Changed 10 years ago by nagasawa

Owner: changed from nobody to nagasawa

ランキングについても同様に問題がありましたの修正します。 報告ありがとうございました。

comment:6 Changed 10 years ago by nagasawa

Resolution: fixed
Status: newclosed

r10464 で修正しました。

Note: See TracTickets for help on using tickets.