プロジェクト

全般

プロフィール

Bug(バグ) #2299

完了

「紹介文を書かれたユーザーが招待したユーザー」が退会出来ない

isao sano さんが13年以上前に追加. 約13年前に更新.

ステータス:
Fixed(完了)
優先度:
High(高め)
担当者:
対象バージョン:
開始日:
2011-07-26
期日:
進捗率:

100%

予定工数:
3.6 で発生するか:
[QA]バグ通知済:
いいえ
3.8 で発生するか:

説明

Overview (現象)

「紹介文を書かれたユーザーが招待を出したユーザー」が退会動作を行うと500エラーが発生して退会できない。
また、退会動作は管理画面、ユーザー側どちらから行っても再現いたします。
同様に「紹介文を書かれたユーザーが出した招待」を削除しようとすると500エラーが発生する。

報告元

http://sns.openpne.jp/diary/26651

■現象
会員の退会/強制退会を実行すると、500エラーが発生して退会できない。

■環境
OpenPNE 3.6 beta11

■再現手順
1.会員Aが会員Bを招待する
2.会員Bで登録&ログインして、会員A向けにフレンド紹介文を作成する
3.会員Aが会員Cを招待する
4.会員Cで登録&ログインする
5.管理画面を開いて、「メンバー管理」から会員Cを強制退会する
→ 500エラー画面が表示される。
6.会員Cで自主退会しても同様に500エラーとなる

Apacheのエラーログには以下のエラーメッセージが記録されます。
[Thu Jul 21 23:50:20 2011] [error] [client xxx.xxx.xxx.xxx] SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`beax`.`intro_friend`, CONSTRAINT `intro_friend_member_id_to_member_relationship_member_id_to` FOREIGN KEY (`member_id_to`) REFERENCES `member_relationship` (`member_id_to`)), referer: http://xxx.xxx.xxx.xxx/pc_backend.php/member/delete/id/3

■原因(推測)
intro_friendテーブルの以下の外部キー定義に問題があるように思います。
CONSTRAINT `intro_friend_member_id_to_member_relationship_member_id_to` FOREIGN KEY (`member_id_to`) REFERENCES `member_relationship` (`member_id_to`)

再現手順を行うと、以下のようなレコード構成になります。

memberテーブル
・レコード1:会員A
・レコード2:会員B
・レコード3:会員C

member_relationshipテーブル
・レコード1:A <- B
・レコード2:B <- A
・レコード3:A <- C
・レコード4:C <- A

intro_friendテーブルのレコード
・レコード1:A <- B

上記状態で会員Cを削除すると、以下のように削除に失敗します。

memberテーブルのレコード3削除する
→ DELETE ON CASCADE定義により、member_relationshipテーブルのレコード3と4が削除される
→ intro_friendテーブルの外部キー定義により、member_relationshipテーブルのレコード3の削除に失敗する(Aが外部キーとして参照されている)

再現バージョン

  • OpenPNE3.6beta11
  • beta12
  • beta13
  • opIntroFriendPlugin-0.9.2.1

再現手順

1. ユーザーBがフレンドのユーザーAの紹介文を書く
2. ユーザーAがユーザーCに招待メールを送る
3. ユーザーCでプロフィール登録を行う
4. 管理画面よりユーザーCを強制退会させる
5. 500エラーが出て退会できない

手順3を行わず、手順2で送信した招待を取り消そうとしても500エラーが発生する

Causes (原因)

バグが発生した原因を記入

Way to fix (修正内容)

修正内容を記入

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