Merge pull request #3111 from CihanSenturk/delete-favorite-module-uninstall

Delete favorite module uninstall #860rtkn8f
This commit is contained in:
Cüneyt Şentürk 2023-12-08 16:42:18 +03:00 committed by GitHub
commit 697d67b08c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 92 additions and 0 deletions

View File

@ -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();
}
}
}

View File

@ -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);
}
}
}