forked from GNUsocial/gnu-social
[COMPONENT][Attachment] Wrap delete operations in transactions and correct sequence of deletation
This commit is contained in:
parent
bf4a0008ef
commit
46d121ef7b
@ -22,6 +22,7 @@ declare(strict_types = 1);
|
|||||||
namespace Component\Attachment;
|
namespace Component\Attachment;
|
||||||
|
|
||||||
use App\Core\Cache;
|
use App\Core\Cache;
|
||||||
|
use App\Core\DB\DB;
|
||||||
use App\Core\Event;
|
use App\Core\Event;
|
||||||
use App\Core\Modules\Component;
|
use App\Core\Modules\Component;
|
||||||
use App\Core\Router\RouteLoader;
|
use App\Core\Router\RouteLoader;
|
||||||
@ -56,13 +57,14 @@ class Attachment extends Component
|
|||||||
return Event::stop;
|
return Event::stop;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onNoteDeleteRelated(Note &$note): bool
|
public function onNoteDeleteRelated(Note &$note, Actor $actor): bool
|
||||||
{
|
{
|
||||||
Cache::delete("note-attachments-{$note->getId()}");
|
Cache::delete("note-attachments-{$note->getId()}");
|
||||||
E\AttachmentToNote::removeWhereNoteId($note->getId());
|
|
||||||
foreach ($note->getAttachments() as $attachment) {
|
foreach ($note->getAttachments() as $attachment) {
|
||||||
$attachment->kill();
|
$attachment->kill();
|
||||||
}
|
}
|
||||||
|
DB::wrapInTransaction(fn () => E\AttachmentToNote::removeWhereNoteId($note->getId()));
|
||||||
|
Cache::delete("note-attachments-{$note->getId()}");
|
||||||
return Event::next;
|
return Event::next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ class Attachment extends Entity
|
|||||||
public function kill(): bool
|
public function kill(): bool
|
||||||
{
|
{
|
||||||
if ($this->livesDecrementAndGet() <= 0) {
|
if ($this->livesDecrementAndGet() <= 0) {
|
||||||
return $this->delete();
|
return DB::wrapInTransaction(fn () => $this->delete());
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -237,6 +237,7 @@ class Attachment extends Entity
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Attachment delete always removes dependencies, cleanups and flushes
|
* Attachment delete always removes dependencies, cleanups and flushes
|
||||||
|
* WARNING: Wrap this function in a transaction!
|
||||||
*
|
*
|
||||||
* @see kill() It's more likely that you want to use that rather than call delete directly
|
* @see kill() It's more likely that you want to use that rather than call delete directly
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user