public function run($request)
 {
     $classes = SoftDeletable::listSoftDeletableClasses();
     $selectedClass = $request->getVar('class');
     $recover = $request->getVar('recover');
     if (!$selectedClass) {
         DB::alteration_message("Please choose any of the following class and pass it as 'class' in the url");
         foreach ($classes as $cl) {
             DB::alteration_message($cl);
         }
         return;
     }
     if (!in_array($selectedClass, $classes)) {
         DB::alteration_message("{$selectedClass} is not valid", "error");
         return;
     }
     $toRecover = array();
     if ($recover) {
         if ($recover == 'all') {
         } else {
             $toRecover = array_map('trim', explode(',', $recover));
         }
     }
     SoftDeletable::$disable = true;
     $records = $selectedClass::get()->where('Deleted IS NOT NULL');
     if (!$records->count()) {
         DB::alteration_message("No soft deleted records");
     }
     foreach ($records as $record) {
         if ($recover == 'all' || in_array($record->ID, $toRecover)) {
             $record->undoDelete();
             DB::alteration_message($record->getTitle() . " (#" . $record->ID . ") has been recovered", 'repaired');
         } else {
             DB::alteration_message($record->getTitle() . " (#" . $record->ID . ") has been deleted at " . $record->Deleted . ' by ' . $record->DeletedBy()->Title);
         }
     }
     if ($recover) {
         DB::alteration_message("Recovery complete");
     } else {
         DB::alteration_message("Recover all of of list of records by passing ?recover=all or ?recover=id,id2,id3 in the url");
     }
 }
 public function forceDelete()
 {
     $status = self::$prevent_delete;
     self::$prevent_delete = false;
     $result = $this->owner->delete();
     self::$prevent_delete = $status;
     return $result;
 }