From bb8c2f80f6575638dc7534012aeffce0d3cda51d Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Wed, 14 Mar 2018 10:48:16 +0200 Subject: [PATCH] Delete from history when deleted --- app/Events/ProjectWasDeleted.php | 29 ++++++++++ app/Events/ProposalWasDeleted.php | 29 ++++++++++ app/Libraries/HistoryUtils.php | 27 ++++++++++ app/Listeners/HistoryListener.php | 74 ++++++++++++++++++++++++++ app/Models/EntityModel.php | 9 ++++ app/Providers/EventServiceProvider.php | 15 ++++++ 6 files changed, 183 insertions(+) create mode 100644 app/Events/ProjectWasDeleted.php create mode 100644 app/Events/ProposalWasDeleted.php create mode 100644 app/Listeners/HistoryListener.php diff --git a/app/Events/ProjectWasDeleted.php b/app/Events/ProjectWasDeleted.php new file mode 100644 index 000000000000..2368fc910670 --- /dev/null +++ b/app/Events/ProjectWasDeleted.php @@ -0,0 +1,29 @@ +project = $project; + } +} diff --git a/app/Events/ProposalWasDeleted.php b/app/Events/ProposalWasDeleted.php new file mode 100644 index 000000000000..009b5127cda6 --- /dev/null +++ b/app/Events/ProposalWasDeleted.php @@ -0,0 +1,29 @@ +proposal = $proposal; + } +} diff --git a/app/Libraries/HistoryUtils.php b/app/Libraries/HistoryUtils.php index b9782b6dab9a..a9e6c68e9602 100644 --- a/app/Libraries/HistoryUtils.php +++ b/app/Libraries/HistoryUtils.php @@ -46,6 +46,10 @@ class HistoryUtils ->get(); foreach ($activities->reverse() as $activity) { + if ($activity->client && $activity->client->is_deleted) { + continue; + } + if ($activity->activity_type_id == ACTIVITY_TYPE_CREATE_CLIENT) { $entity = $activity->client; } elseif ($activity->activity_type_id == ACTIVITY_TYPE_CREATE_TASK || $activity->activity_type_id == ACTIVITY_TYPE_UPDATE_TASK) { @@ -78,6 +82,28 @@ class HistoryUtils } } + public static function deleteHistory(EntityModel $entity) + { + $history = Session::get(RECENTLY_VIEWED) ?: []; + $accountHistory = isset($history[$entity->account_id]) ? $history[$entity->account_id] : []; + $remove = []; + + for ($i=0; $iequalTo($item)) { + $remove[] = $i; + } elseif ($entity->getEntityType() == ENTITY_CLIENT && $entity->public_id == $item->client_id) { + $remove[] = $i; + } + } + + for ($i=count($remove) - 1; $i>=0; $i--) { + array_splice($history[$entity->account_id], $remove[$i], 1); + } + + Session::put(RECENTLY_VIEWED, $history); + } + public static function trackViewed(EntityModel $entity) { $entityType = $entity->getEntityType(); @@ -136,6 +162,7 @@ class HistoryUtils private static function convertToObject($entity) { $object = new stdClass(); + $object->id = $entity->id; $object->accountId = $entity->account_id; $object->url = $entity->present()->url; $object->entityType = $entity->subEntityType(); diff --git a/app/Listeners/HistoryListener.php b/app/Listeners/HistoryListener.php new file mode 100644 index 000000000000..537785181c67 --- /dev/null +++ b/app/Listeners/HistoryListener.php @@ -0,0 +1,74 @@ +client); + } + + /** + * @param InvoiceWasDeleted $event + */ + public function deletedInvoice(InvoiceWasDeleted $event) + { + HistoryUtils::deleteHistory($event->invoice); + } + + /** + * @param QuoteWasDeleted $event + */ + public function deletedQuote(QuoteWasDeleted $event) + { + HistoryUtils::deleteHistory($event->quote); + } + + /** + * @param TaskWasDeleted $event + */ + public function deletedTask(TaskWasDeleted $event) + { + HistoryUtils::deleteHistory($event->task); + } + + /** + * @param ExpenseWasDeleted $event + */ + public function deletedExpense(ExpenseWasDeleted $event) + { + HistoryUtils::deleteHistory($event->expense); + } + + /** + * @param ProjectWasDeleted $event + */ + public function deletedProject(ProjectWasDeleted $event) + { + HistoryUtils::deleteHistory($event->project); + } + + /** + * @param ProposalWasDeleted $event + */ + public function deletedProposal(ProposalWasDeleted $event) + { + HistoryUtils::deleteHistory($event->proposal); + } +} diff --git a/app/Models/EntityModel.php b/app/Models/EntityModel.php index fb02f1404983..79ea6bfe432b 100644 --- a/app/Models/EntityModel.php +++ b/app/Models/EntityModel.php @@ -427,4 +427,13 @@ class EntityModel extends Eloquent throw $exception; } } + + public function equalTo($obj) + { + if (empty($obj->id)) { + return false; + } + + return $this->id == $obj->id && $this->getEntityType() == $obj->entityType; + } } diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 5a501e891df9..f8eac7da90f2 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -27,6 +27,7 @@ class EventServiceProvider extends ServiceProvider 'App\Events\ClientWasDeleted' => [ 'App\Listeners\ActivityListener@deletedClient', 'App\Listeners\SubscriptionListener@deletedClient', + 'App\Listeners\HistoryListener@deletedClient', ], 'App\Events\ClientWasRestored' => [ 'App\Listeners\ActivityListener@restoredClient', @@ -54,6 +55,7 @@ class EventServiceProvider extends ServiceProvider 'App\Listeners\ActivityListener@deletedInvoice', 'App\Listeners\TaskListener@deletedInvoice', 'App\Listeners\ExpenseListener@deletedInvoice', + 'App\Listeners\HistoryListener@deletedInvoice', ], 'App\Events\InvoiceWasRestored' => [ 'App\Listeners\ActivityListener@restoredInvoice', @@ -89,6 +91,7 @@ class EventServiceProvider extends ServiceProvider ], 'App\Events\QuoteWasDeleted' => [ 'App\Listeners\ActivityListener@deletedQuote', + 'App\Listeners\HistoryListener@deletedQuote', ], 'App\Events\QuoteWasRestored' => [ 'App\Listeners\ActivityListener@restoredQuote', @@ -188,6 +191,7 @@ class EventServiceProvider extends ServiceProvider 'App\Events\TaskWasDeleted' => [ 'App\Listeners\ActivityListener@deletedTask', 'App\Listeners\SubscriptionListener@deletedTask', + 'App\Listeners\HistoryListener@deletedTask', ], // Vendor events @@ -219,6 +223,17 @@ class EventServiceProvider extends ServiceProvider 'App\Events\ExpenseWasDeleted' => [ 'App\Listeners\ActivityListener@deletedExpense', 'App\Listeners\SubscriptionListener@deletedExpense', + 'App\Listeners\HistoryListener@deletedExpense', + ], + + // Project events + 'App\Events\ProjectWasDeleted' => [ + 'App\Listeners\HistoryListener@deletedProject', + ], + + // Proposal events + 'App\Events\ProposalWasDeleted' => [ + 'App\Listeners\HistoryListener@deletedProposal', ], 'Illuminate\Queue\Events\JobExceptionOccurred' => [