プロジェクト

全般

プロフィール

Bug(バグ) #3738

fileを参照するテーブル(activity_imageなど)のレコード削除時に対応するfileレコードが削除されない

Youichi Kimura9年以上前に追加. ほぼ7年前に更新.

ステータス:
Won't fix(対応せず)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2013-07-16
期日:
進捗率:

0%

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

説明

Overview (現象)

メンバーのプロフィール画像やコミュニティ画像などの file テーブルを介して格納される画像について、ブラウザ上で画像を変更・削除しても対応する file, file_bin レコードがデータベース上に残ったまま削除されない。

削除されずに残った画像は管理画面のアップロード画像リスト (/pc_backend.php/monitoring) からも確認できる。

対象となるテーブル:

  • OpenPNE コア
  • opAlbumPlugin (#2447)
    • album
    • album_image
  • opCommunityTopicPlugin (#2591)
    • community_event_image
    • community_event_comment_image
    • community_topic_image
    • community_topic_comment_image
  • opDiaryPlugin (#106 修正済み)
    • diary_image
    • diary_comment_image
  • opMessagePlugin (#190)
    • message_file

Causes (原因)

HogeImage:
  columns:
    id: { type: integer(4), primary: true, autoincrement: true }
    hoge_id: { type: integer(4), notnull: true }
    file_id: { type: integer(4), notnull: true }
  relations:
    Hoge: { onDelete: cascade }
    File: { onDelete: cascade }

例えば上記の様な DB スキーマの定義があったとき、外部キー制約があるため file のレコードが削除されると対応する hoge_image のレコードが削除されるが、逆に hoge_image のレコードが削除されても file のレコードは削除されない。そのため hoge_image のレコードを削除する際に対応する file のレコードを明示的に削除する必要がある。

Way to fix (修正内容)

HogeImage を削除する際に関連する File が削除されるようにする

class HogeImage extends BaseHogeImage
{
  public function preDelete($event)
  {
    $this->File->delete();
  }
}

File を参照するモデルのクラスに preDelete() メソッドを定義し、その中で $this->File->delete(); を実行することで関連する file テーブルのレコードも削除されるようになる。

Hoge を削除する際に関連する HogeImage を明示的に削除する

hoge のレコードを削除した場合は、外部キー制約の ON DELETE CASCADE によりそれを参照する hoge_image のレコードも削除される。しかしこれは DBMS 側で行われるもので Doctrine は関知しないため、削除時に HogeImage::preDelete() は実行されない。
これでは Hoge の delete() メソッドを呼び出した場合には前述の修正に関わらず File から画像が削除されず残ってしまうため、Hoge::preDelete() から $this->HogeImage->delete(); を明示的に呼び出す必要がある。

class Hoge extends BaseHoge
{
  public function preDelete($event)
  {
    // HogeImage::preDelete() を実行させるために明示的に削除する
    $this->HogeImage->delete();
  }
}

子チケット

Bug(バグ) #3375: メンバーが退会しても、管理画面にメンバーのイメージ画像が残っているWon't fix(対応せず)Rimpei Ogawa

Bug(バグ) #3752: アクティビティを削除しても添付された画像がDBから削除されないWon't fix(対応せず)Youichi Kimura

Bug(バグ) #3753: コミュニティ画像が設定されたコミュニティを削除しても画像がDBから削除されないWon't fix(対応せず)Youichi Kimura

Bug(バグ) #3755: バナー設定でアップロードした画像を削除してもDBから削除されないWon't fix(対応せず)Youichi Kimura

Bug(バグ) #3756: 画像付きのOAuthアプリケーションを削除してもDBから画像が削除されないWon't fix(対応せず)Youichi Kimura


関連するチケット

関連している opAlbumPlugin - Bug(バグ) #2447: アルバム・アルバム画像を削除しても画像ファイルが削除されていない Pending Review(レビュー待ち) 2011-09-28
関連している opCommunityTopicPlugin - Backport(バックポート) #2591: 画像が添付されたコミュニティトピックを削除しても、管理画面のアップロード画像リストに画像が残る Won't fix(対応せず) 2011-11-14
関連している opMessagePlugin - Bug(バグ) #190: メッセージを削除しても画像データが削除されていない Fixed(完了) 2009-07-02
コピー先 OpenPNE 3 - Backport(バックポート) #3767: fileを参照するテーブル(activity_imageなど)のレコード削除時に対応するfileレコードが削除されない Fixed(完了) 2015-01-05
コピー先 OpenPNE 3 - Backport(バックポート) #3772: fileを参照するテーブル(activity_imageなど)のレコード削除時に対応するfileレコードが削除されない Fixed(完了) 2015-01-05

履歴

#1 Youichi Kimura9年以上前に更新

  • 説明 を更新 (diff)

#2 Youichi Kimura9年以上前に更新

  • 説明 を更新 (diff)

#3 Youichi Kimura9年以上前に更新

  • 説明 を更新 (diff)

#4 Youichi Kimura9年以上前に更新

  • 説明 を更新 (diff)

#5 Youichi Kimura9年以上前に更新

  • 関連している Bug(バグ) #2447: アルバム・アルバム画像を削除しても画像ファイルが削除されていない を追加

#6 Youichi Kimura9年以上前に更新

  • 関連している Bug(バグ) #3375: メンバーが退会しても、管理画面にメンバーのイメージ画像が残っている を追加

#7 Youichi Kimura9年以上前に更新

  • 関連している Backport(バックポート) #2591: 画像が添付されたコミュニティトピックを削除しても、管理画面のアップロード画像リストに画像が残る を追加

#8 Youichi Kimura9年以上前に更新

  • 関連している を削除 (Bug(バグ) #3375: メンバーが退会しても、管理画面にメンバーのイメージ画像が残っている)

#9 Youichi Kimura約9年前に更新

  • 説明 を更新 (diff)

#10 Youichi Kimura約9年前に更新

  • 題名fileテーブルを参照するテーブル(member_imageなど)の削除時に対応するfileレコードが削除されない から fileテーブルを参照するテーブル(activity_imageなど)の削除時に対応するfileレコードが削除されない に変更

#11 Youichi Kimura約9年前に更新

  • ステータスNew(新規) から Accepted(着手) に変更

OpenPNEコア側の修正については下記Pull Requestにて進行中です。
https://github.com/openpne/OpenPNE3/pull/238

#12 Youichi Kimura約9年前に更新

  • 説明 を更新 (diff)

#13 Youichi Kimura約9年前に更新

  • 関連している Bug(バグ) #190: メッセージを削除しても画像データが削除されていない を追加

#14 Youichi Kimura約9年前に更新

  • 説明 を更新 (diff)

#15 Youichi Kimura約9年前に更新

  • 題名fileテーブルを参照するテーブル(activity_imageなど)の削除時に対応するfileレコードが削除されない から fileを参照するテーブル(activity_imageなど)のレコード削除時に対応するfileレコードが削除されない に変更
  • ステータスAccepted(着手) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

下記チケットの修正が完了しました。

OpenPNEコア: #3752, #3753, #3755, #3756
opCommunityTopicPlugin: #2591
opMessagePlugin: #190

#16 Chiharu Nakajima約9年前に更新

  • コピー先 Backport(バックポート) #3767: fileを参照するテーブル(activity_imageなど)のレコード削除時に対応するfileレコードが削除されない を追加

#17 Chiharu Nakajima約9年前に更新

  • コピー先 Backport(バックポート) #3772: fileを参照するテーブル(activity_imageなど)のレコード削除時に対応するfileレコードが削除されない を追加

#18 Rimpei Ogawa約9年前に更新

  • ステータスPending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

#20 kaoru nほぼ7年前に更新

  • ステータスPending Testing(テスト待ち) から Won't fix(対応せず) に変更
  • 対象バージョンOpenPNE 3.9.0-old から OpenPNE 3.9.0 に変更
  • 進捗率70 から 0 に変更

OpenPNE 3.8.15 にて対応済みであったため、対応せずとします。

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