From 524c6c502e1989a1256c0ffefec09a7068e37568 Mon Sep 17 00:00:00 2001 From: snipe Date: Fri, 27 Jul 2018 02:42:55 -0700 Subject: [PATCH] Features/restore deleted cmd (#5982) * Delete content from login attempts table * Script to restore deleted users and put their asset assignments back * Uncomment backup --- app/Console/Commands/PaveIt.php | 1 + app/Console/Commands/RestoreDeletedUsers.php | 120 +++++++++++++++++++ app/Console/Kernel.php | 1 + 3 files changed, 122 insertions(+) create mode 100644 app/Console/Commands/RestoreDeletedUsers.php diff --git a/app/Console/Commands/PaveIt.php b/app/Console/Commands/PaveIt.php index 35b6b03a9b..d30917a735 100644 --- a/app/Console/Commands/PaveIt.php +++ b/app/Console/Commands/PaveIt.php @@ -79,6 +79,7 @@ class PaveIt extends Command DB::statement('delete from accessories_users'); DB::statement('delete from asset_logs'); DB::statement('delete from asset_maintenances'); + DB::statement('delete from login_attempts'); DB::statement('delete from asset_uploads'); DB::statement('delete from action_logs'); DB::statement('delete from checkout_requests'); diff --git a/app/Console/Commands/RestoreDeletedUsers.php b/app/Console/Commands/RestoreDeletedUsers.php new file mode 100644 index 0000000000..a9c8a43925 --- /dev/null +++ b/app/Console/Commands/RestoreDeletedUsers.php @@ -0,0 +1,120 @@ +option('start_date'); + $end_date = $this->option('end_date'); + $asset_totals = 0; + $license_totals = 0; + $user_count = 0; + + + if (($start_date=='') || ($end_date=='')) { + $this->info('ERROR: All fields are required.'); + return false; + } + + $users = User::whereBetween('deleted_at', [$start_date, $end_date])->withTrashed()->get(); + $this->info('There are '.$users->count().' users deleted between '.$start_date.' and '.$end_date); + $this->warn('Making a backup!'); + Artisan::call('backup:run'); + + foreach ($users as $user) { + $user_count++; + $user_logs = Actionlog::where('target_id', $user->id)->where('target_type',User::class) + ->where('action_type','checkout')->with('item')->get(); + + $this->info($user_count.'. '.$user->username.' ('.$user->id.') was deleted at '.$user->deleted_at. ' and has '.$user_logs->count().' checkouts associated.'); + + foreach ($user_logs as $user_log) { + $this->info(' * '.$user_log->item_type.': '.$user_log->item->name.' - item_id: '.$user_log->item_id); + + if ($user_log->item_type==Asset::class) { + $asset_totals++; + + DB::table('assets') + ->where('id', $user_log->item_id) + ->update(['assigned_to' => $user->id, 'assigned_type'=> User::class]); + + $this->info(' ** Asset '.$user_log->item->id.' ('.$user_log->item->asset_tag.') restored to user '.$user->id.''); + + } elseif ($user_log->item_type==License::class) { + $license_totals++; + + $avail_seat = DB::table('license_seats')->where('license_id','=',$user_log->item->id) + ->whereNull('assigned_to')->whereNull('asset_id')->whereBetween('updated_at', [$start_date, $end_date])->first(); + if ($avail_seat) { + $this->info(' ** Allocating seat '.$avail_seat->id.' for this License'); + + DB::table('license_seats') + ->where('id', $avail_seat->id) + ->update(['assigned_to' => $user->id]); + + } else { + $this->warn('ERROR: No available seats for '.$user_log->item->name); + } + + } + + } + + $this->warn('Restoring user '.$user->username.'!'); + $user->restore(); + + + } + + $this->info($asset_totals.' assets affected'); + $this->info($license_totals.' licenses affected'); + + + + } + + +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 4d66056732..3713624422 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -30,6 +30,7 @@ class Kernel extends ConsoleKernel Commands\SyncAssetLocations::class, Commands\RegenerateAssetTags::class, Commands\SyncAssetCounters::class, + Commands\RestoreDeletedUsers::class, ]; /**