diff --git a/app/Jobs/Common/DeleteReport.php b/app/Jobs/Common/DeleteReport.php index 0a7c7c1ad..a655bc0d5 100644 --- a/app/Jobs/Common/DeleteReport.php +++ b/app/Jobs/Common/DeleteReport.php @@ -10,9 +10,62 @@ class DeleteReport extends Job implements ShouldDelete public function handle(): bool { \DB::transaction(function () { + $this->deleteFavorite(); + $this->deletePin(); + $this->model->delete(); }); return true; } + + public function deleteFavorite() + { + $favorites = setting('favorites.menu', []); + + if (empty($favorites)) { + return; + } + + foreach ($favorites as $user_id => $user_favorites) { + $user_favorites = json_decode($user_favorites, true); + + foreach ($user_favorites as $key => $favorite) { + if (! is_array($favorite['route'])) { + continue; + } + + if (str_contains($favorite['route'][0], 'reports.show') && $this->model->id == $favorite['route'][1]) { + unset($user_favorites[$key]); + } + } + + setting()->set('favorites.menu.' . $user_id, json_encode($user_favorites)); + setting()->save(); + } + } + + public function deletePin() + { + $pins = setting('favorites.report', []); + + if (empty($pins)) { + return; + } + + foreach ($pins as $user_id => $user_pins) { + $user_pins = json_decode($user_pins, true); + + foreach ($user_pins as $key => $pin) { + if ($this->model->id == $pin) { + unset($user_pins[$key]); + + break; + } + } + + setting()->set('favorites.report.' . $user_id, json_encode($user_pins)); + setting()->save(); + } + } } diff --git a/app/Listeners/Module/FinishUninstallation.php b/app/Listeners/Module/FinishUninstallation.php index 484d9981e..1399807ff 100644 --- a/app/Listeners/Module/FinishUninstallation.php +++ b/app/Listeners/Module/FinishUninstallation.php @@ -31,6 +31,7 @@ class FinishUninstallation $this->deleteWidgets($event->alias); $this->deleteEmailTemplates($event->alias); $this->deleteReports($event->alias); + $this->deleteFavorites($event->alias); } /** @@ -104,4 +105,42 @@ class FinishUninstallation } }); } + + /** + * Delete any favorite created by the module. + * + * @param string $alias + * @return void + */ + protected function deleteFavorites($alias) + { + $favorites = setting('favorites.menu', []); + + if (empty($favorites)) { + return; + } + + try { + foreach ($favorites as $user_id => $user_favorites) { + $user_favorites = json_decode($user_favorites, true); + + foreach ($user_favorites as $key => $favorite) { + $route = $favorite['route']; + + if (is_array($route)) { + $route = $route[0]; + } + + if (str_contains($route, $alias)) { + unset($user_favorites[$key]); + } + } + + setting()->set('favorites.menu.' . $user_id, json_encode($user_favorites)); + setting()->save(); + } + } catch (Throwable $e) { + report($e); + } + } }