diff --git a/app/Models/Proposal.php b/app/Models/Proposal.php index 0efde71..09ed1b1 100644 --- a/app/Models/Proposal.php +++ b/app/Models/Proposal.php @@ -24,6 +24,22 @@ class Proposal extends Model { use Reportable; + protected static function boot() + { + parent::boot(); + + static::deleting(function(Proposal $self) { + $self->reportsOf()->delete(); + + // update refcounts + $rev = $self->revision; + $rev->decrement('refs'); + + // Delete the revision if it has no other refs (manually, to update row refs) + if ($rev->refs <= 0) $rev->delete(); + }); + } + /** Authoring user */ public function author() { diff --git a/app/Models/Revision.php b/app/Models/Revision.php index c64fce8..979a6fb 100644 --- a/app/Models/Revision.php +++ b/app/Models/Revision.php @@ -32,6 +32,8 @@ class Revision extends Model static::deleting(function(Revision $self) { // update refcounts $self->rows()->decrement('refs'); + + $self->rows()->where('refs', '<=', 0)->delete(); }); } diff --git a/app/Models/Table.php b/app/Models/Table.php index 01bcc3f..ed8a0cc 100644 --- a/app/Models/Table.php +++ b/app/Models/Table.php @@ -38,8 +38,15 @@ class Table extends Model parent::boot(); static::deleting(function(Table $self) { - // update refcounts + // update revision refcounts $self->revisions()->decrement('refs'); + + $self->reportsOf()->delete(); + + // delete revisions with zero refs (manually, to properly cascade to rows) + foreach ($self->revisions()->where('refs', '<=', 0)->get() as $rev) { + $rev->delete(); + } }); } diff --git a/app/Models/TableComment.php b/app/Models/TableComment.php index 820b912..26b23a0 100644 --- a/app/Models/TableComment.php +++ b/app/Models/TableComment.php @@ -25,6 +25,15 @@ class TableComment extends Model { use Reportable; + protected static function boot() + { + parent::boot(); + + static::deleting(function(TableComment $self) { + $self->reportsOf()->delete(); + }); + } + /** Context data table */ public function table() { diff --git a/app/Models/User.php b/app/Models/User.php index 60c9b37..6c426b9 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -58,10 +58,18 @@ class User extends Authenticatable parent::boot(); static::deleting(function(User $self) { + // comments are deleted via cascade + + $self->reportsOf()->delete(); + // manually delete proposals to ensure row refcounts are updated foreach ($self->proposals as $proposal) { $proposal->delete(); } + + foreach ($self->tables as $table) { + $table->delete(); + } }); }