public function saveDatabase($backup_name) { $entire_database = new Collection(); //This will hold literally the entire database and then some //Some info about the backup itself $backup_info = new Collection(); $backup_info->put("version", "1"); //In case a breaking change happens in the future (like new table added or a table removed) $backup_info->put("date", Carbon::now()->toDateTimeString()); //UTC time the backup started $backup_info->put("name", $backup_name); //A user-assigned name for the backup $backup_info->put("created_by", Auth::user()->email); //The email for the user that created it $entire_database->put("kora3", $backup_info); //Models that have data in the database should be put into the $entire_database collection //You need to loop through all of your table's columns and add them first to this function, then to restore //Don't forget to include important information about relationships like pivot tables (See FormGroups for example) //Project $all_projects_data = new Collection(); $entire_database->put("projects", $all_projects_data); try { //Everything is inside this try-catch block, so if something goes wrong, the exception's getMessage will //be displayed to the user. If there is an error backing up an individual row, it will try to continue. //If there is something more serious (ex. kora3_projects table doesn't exist), it will stop. // Project foreach (Project::all() as $project) { try { $individual_project_data = new Collection(); $individual_project_data->put("pid", $project->pid); $individual_project_data->put("name", $project->name); $individual_project_data->put("slug", $project->slug); $individual_project_data->put("description", $project->description); $individual_project_data->put("adminGID", $project->adminGID); $individual_project_data->put("active", $project->active); $individual_project_data->put("created_at", $project->created_at->toDateTimeString()); $individual_project_data->put("updated_at", $project->updated_at->toDateTimeString()); $all_projects_data->push($individual_project_data); } catch (\Exception $e) { $this->ajax_error_list->push($e->getMessage()); } } // Form $all_forms_data = new Collection(); $entire_database->put("forms", $all_forms_data); foreach (Form::all() as $form) { try { $individual_form_data = new Collection(); $individual_form_data->put("fid", $form->fid); $individual_form_data->put("pid", $form->pid); $individual_form_data->put("adminGID", $form->adminGID); $individual_form_data->put("name", $form->name); $individual_form_data->put("slug", $form->slug); $individual_form_data->put("description", $form->description); $individual_form_data->put("layout", $form->layout); $individual_form_data->put("public_metadata", $form->public_metadata); $individual_form_data->put("created_at", $form->created_at->toDateTimeString()); $individual_form_data->put("updated_at", $form->updated_at->toDateTimeString()); $all_forms_data->push($individual_form_data); } catch (\Exception $e) { $this->ajax_error_list->push($e->getMessage()); } } // FormGroup $all_formgroup_data = new Collection(); $entire_database->put("formgroups", $all_formgroup_data); foreach (FormGroup::all() as $formgroup) { try { $individual_formgroup_data = new Collection(); $group_data = new Collection(); $group_data->put("id", $formgroup->id); $group_data->put("name", $formgroup->name); $group_data->put("fid", $formgroup->fid); $group_data->put("create", $formgroup->create); $group_data->put("edit", $formgroup->edit); $group_data->put("delete", $formgroup->delete); $group_data->put("ingest", $formgroup->ingest); $group_data->put("modify", $formgroup->modify); $group_data->put("destroy", $formgroup->destroy); $group_data->put("created_at", $formgroup->created_at->toDateTimeString()); $group_data->put("updated_at", $formgroup->updated_at->toDateTimeString()); $individual_formgroup_data->put("group_data", $group_data); $individual_formgroup_data->put("user_data", $formgroup->users()->get()->modelKeys()); $all_formgroup_data->push($individual_formgroup_data); } catch (\Exception $e) { $this->ajax_error_list->push($e->getMessage()); } } // ProjectGroup $all_projectgroup_data = new Collection(); $entire_database->put("projectgroups", $all_projectgroup_data); foreach (ProjectGroup::all() as $projectgroup) { try { $individual_projectgroup_data = new Collection(); $group_data = new Collection(); $group_data->put("id", $projectgroup->id); $group_data->put("name", $projectgroup->name); $group_data->put("pid", $projectgroup->pid); $group_data->put("create", $projectgroup->create); $group_data->put("edit", $projectgroup->edit); $group_data->put("delete", $projectgroup->delete); $group_data->put("created_at", $projectgroup->created_at->toDateTimeString()); $group_data->put("updated_at", $projectgroup->updated_at->toDateTimeString()); $individual_projectgroup_data->put("group_data", $group_data); $individual_projectgroup_data->put("user_data", $projectgroup->users()->get()->modelKeys()); $all_projectgroup_data->push($individual_projectgroup_data); } catch (\Exception $e) { $this->ajax_error_list->push($e->getMessage()); } } // User $all_users_data = new Collection(); $entire_database->put("users", $all_users_data); foreach (User::all() as $user) { try { $individual_user_data = new Collection(); if ($user->id == 1) { continue; } //skip the first admin account (the user who will be restoring) $individual_user_data->put("id", $user->id); $individual_user_data->put("admin", $user->admin); $individual_user_data->put("active", $user->active); $individual_user_data->put("username", $user->username); $individual_user_data->put("name", $user->name); $individual_user_data->put("email", $user->email); $individual_user_data->put("password", $user->password); $individual_user_data->put("organization", $user->organization); $individual_user_data->put("language", $user->language); $individual_user_data->put("regtoken", $user->regtoken); $individual_user_data->put("remember_token", $user->remember_token); $individual_user_data->put("created_at", $user->created_at->toDateTimeString()); $individual_user_data->put("updated_at", $user->updated_at->toDateTimeString()); $all_users_data->push($individual_user_data); } catch (\Exception $e) { $this->ajax_error_list->push($e->getMessage()); } } // Field $all_fields_data = new Collection(); $entire_database->put("fields", $all_fields_data); foreach (Field::all() as $field) { try { $individual_field_data = new Collection(); $individual_field_data->put("flid", $field->flid); $individual_field_data->put("pid", $field->pid); $individual_field_data->put("fid", $field->fid); $individual_field_data->put("order", $field->order); $individual_field_data->put("type", $field->type); $individual_field_data->put("name", $field->name); $individual_field_data->put("slug", $field->slug); $individual_field_data->put("desc", $field->desc); $individual_field_data->put("required", $field->required); $individual_field_data->put("default", $field->default); $individual_field_data->put("options", $field->options); $individual_field_data->put("created_at", $field->created_at->toDateTimeString()); $individual_field_data->put("updated_at", $field->updated_at->toDateTimeString()); $all_fields_data->push($individual_field_data); } catch (\Exception $e) { $this->ajax_error_list->push($e->getMessage()); } } // Record $all_records_data = new Collection(); $entire_database->put("records", $all_records_data); foreach (Record::all() as $record) { try { $individual_record_data = new Collection(); $individual_record_data->put("rid", $record->rid); $individual_record_data->put("kid", $record->kid); $individual_record_data->put("pid", $record->pid); $individual_record_data->put("fid", $record->fid); $individual_record_data->put("owner", $record->owner); $individual_record_data->put("created_at", $record->created_at->toDateTimeString()); $individual_record_data->put("updated_at", $record->updated_at->toDateTimeString()); $all_records_data->push($individual_record_data); } catch (\Exception $e) { $this->ajax_error_list->push($e->getMessage()); } } // TextField $all_textfields_data = new Collection(); $entire_database->put("textfields", $all_textfields_data); foreach (TextField::all() as $textfield) { try { $individual_textfield_data = new Collection(); $individual_textfield_data->put("id", $textfield->id); $individual_textfield_data->put("rid", $textfield->rid); $individual_textfield_data->put("flid", $textfield->flid); $individual_textfield_data->put("text", $textfield->text); $individual_textfield_data->put("created_at", $textfield->created_at->toDateTimeString()); $individual_textfield_data->put("updated_at", $textfield->updated_at->toDateTimeString()); $all_textfields_data->push($individual_textfield_data); } catch (\Exception $e) { $this->ajax_error_list->push($e->getMessage()); } } // RichTextField $all_richtextfields_data = new Collection(); $entire_database->put("richtextfields", $all_richtextfields_data); foreach (RichTextField::all() as $richtextfield) { try { $individual_richtextfield_data = new Collection(); $individual_richtextfield_data->put("id", $richtextfield->id); $individual_richtextfield_data->put("rid", $richtextfield->rid); $individual_richtextfield_data->put("flid", $richtextfield->flid); $individual_richtextfield_data->put("rawtext", $richtextfield->rawtext); $individual_richtextfield_data->put("created_at", $richtextfield->created_at->toDateTimeString()); $individual_richtextfield_data->put("updated_at", $richtextfield->updated_at->toDateTimeString()); $all_richtextfields_data->push($individual_richtextfield_data); } catch (\Exception $e) { $this->ajax_error_list->push($e->getMessage()); } } // NumberField $all_numberfields_data = new Collection(); $entire_database->put("numberfields", $all_numberfields_data); foreach (NumberField::all() as $numberfield) { try { $individual_numberfield_data = new Collection(); $individual_numberfield_data->put("id", $numberfield->id); $individual_numberfield_data->put("rid", $numberfield->rid); $individual_numberfield_data->put("flid", $numberfield->flid); $individual_numberfield_data->put("number", $numberfield->number); $individual_numberfield_data->put("created_at", $numberfield->created_at->toDateTimeString()); $individual_numberfield_data->put("updated_at", $numberfield->updated_at->toDateTimeString()); $all_numberfields_data->push($individual_numberfield_data); } catch (\Exception $e) { $this->ajax_error_list->push($e->getMessage()); } } // ListField $all_listfields_data = new Collection(); $entire_database->put("listfields", $all_listfields_data); foreach (ListField::all() as $listfield) { try { $individual_listfield_data = new Collection(); $individual_listfield_data->put("id", $listfield->id); $individual_listfield_data->put("rid", $listfield->rid); $individual_listfield_data->put("flid", $listfield->flid); $individual_listfield_data->put("option", $listfield->option); $individual_listfield_data->put("created_at", $listfield->created_at->toDateTimeString()); $individual_listfield_data->put("updated_at", $listfield->updated_at->toDateTimeString()); $all_listfields_data->push($individual_listfield_data); } catch (\Exception $e) { $this->ajax_error_list->push($e->getMessage()); } } // GeneratedListField $all_generatedlistfields_data = new Collection(); $entire_database->put("generatedlistfields", $all_generatedlistfields_data); foreach (GeneratedListField::all() as $generatedlistfield) { try { $individual_generatedlistfield_data = new Collection(); $individual_generatedlistfield_data->put("id", $generatedlistfield->id); $individual_generatedlistfield_data->put("rid", $generatedlistfield->rid); $individual_generatedlistfield_data->put("flid", $generatedlistfield->flid); $individual_generatedlistfield_data->put("options", $generatedlistfield->options); $individual_generatedlistfield_data->put("created_at", $generatedlistfield->created_at->toDateTimeString()); $individual_generatedlistfield_data->put("updated_at", $generatedlistfield->updated_at->toDateTimeString()); $all_generatedlistfields_data->push($individual_generatedlistfield_data); } catch (\Exception $e) { $this->ajax_error_list->push($e->getMessage()); } } // MultiSelectListField $all_multiselectlistfields_data = new Collection(); $entire_database->put("multiselectlistfields", $all_multiselectlistfields_data); foreach (MultiSelectListField::all() as $multiselectlistfield) { try { $individual_multiselectlistfield_data = new Collection(); $individual_multiselectlistfield_data->put("id", $multiselectlistfield->id); $individual_multiselectlistfield_data->put("rid", $multiselectlistfield->rid); $individual_multiselectlistfield_data->put("flid", $multiselectlistfield->flid); $individual_multiselectlistfield_data->put("options", $multiselectlistfield->options); $individual_multiselectlistfield_data->put("created_at", $multiselectlistfield->created_at->toDateTimeString()); $individual_multiselectlistfield_data->put("updated_at", $multiselectlistfield->updated_at->toDateTimeString()); $all_multiselectlistfields_data->push($individual_multiselectlistfield_data); } catch (\Exception $e) { $this->ajax_error_list->push($e->getMessage()); } } // DateField $all_datefields_data = new Collection(); $entire_database->put("datefields", $all_datefields_data); foreach (DateField::all() as $datefield) { try { $individual_datefield_data = new Collection(); $individual_datefield_data->put("id", $datefield->id); $individual_datefield_data->put("rid", $datefield->rid); $individual_datefield_data->put("flid", $datefield->flid); $individual_datefield_data->put("circa", $datefield->circa); $individual_datefield_data->put("month", $datefield->month); $individual_datefield_data->put("day", $datefield->year); $individual_datefield_data->put("year", $datefield->year); $individual_datefield_data->put("era", $datefield->era); $individual_datefield_data->put("created_at", $datefield->created_at->toDateTimeString()); $individual_datefield_data->put("updated_at", $datefield->updated_at->toDateTimeString()); $all_datefields_data->push($individual_datefield_data); } catch (\Exception $e) { $this->ajax_error_list->push($e->getMessage()); } } // ScheduleField $all_schedulefields_data = new Collection(); $entire_database->put("schedulefields", $all_schedulefields_data); foreach (ScheduleField::all() as $schedulefield) { try { $individual_schedulefield_data = new Collection(); $individual_schedulefield_data->put("id", $schedulefield->id); $individual_schedulefield_data->put("rid", $schedulefield->rid); $individual_schedulefield_data->put("flid", $schedulefield->flid); $individual_schedulefield_data->put("events", $schedulefield->events); $individual_schedulefield_data->put("created_at", $schedulefield->created_at->toDateTimeString()); $individual_schedulefield_data->put("updated_at", $schedulefield->updated_at->toDateTimeString()); $all_schedulefields_data->push($individual_schedulefield_data); } catch (\Exception $e) { $this->ajax_error_list->push($e->getMessage()); } } // GeolocatorField $all_geolocatorfields_data = new Collection(); $entire_database->put("geolocatorfields", $all_geolocatorfields_data); foreach (GeolocatorField::all() as $geolocatorfield) { try { $individual_geolocatorfield_data = new Collection(); $individual_geolocatorfield_data->put("id", $geolocatorfield->id); $individual_geolocatorfield_data->put("rid", $geolocatorfield->rid); $individual_geolocatorfield_data->put("flid", $geolocatorfield->flid); $individual_geolocatorfield_data->put("locations", $geolocatorfield->locations); $individual_geolocatorfield_data->put("created_at", $geolocatorfield->created_at->toDateTimeString()); $individual_geolocatorfield_data->put("updated_at", $geolocatorfield->updated_at->toDateTimeString()); $all_geolocatorfields_data->push($individual_geolocatorfield_data); } catch (\Exception $e) { $this->ajax_error_list->push($e->getMessage()); } } // Token $all_tokens_data = new Collection(); $entire_database->put("tokens", $all_tokens_data); foreach (Token::all() as $token) { try { $individual_token_data = new Collection(); $individual_token_data->put("id", $token->id); $individual_token_data->put("type", $token->type); $individual_token_data->put("token", $token->token); $individual_token_data->put("created_at", $token->created_at->toDateTimeString()); $individual_token_data->put("updated_at", $token->updated_at->toDateTimeString()); $all_tokens_data->push($individual_token_data); } catch (\Exception $e) { $this->ajax_error_list->push($e->getMessage()); } } // Metadata $all_metadatas_data = new Collection(); $entire_database->put("metadatas", $all_metadatas_data); foreach (Metadata::all() as $metadata) { try { $individual_metadata_data = new Collection(); $individual_metadata_data->put("flid", $metadata->flid); $individual_metadata_data->put("pid", $metadata->pid); $individual_metadata_data->put("fid", $metadata->fid); $individual_metadata_data->put("name", $metadata->name); $individual_metadata_data->put("created_at", $metadata->created_at->toDateTimeString()); $individual_metadata_data->put("updated_at", $metadata->updated_at->toDateTimeString()); $all_metadatas_data->push($individual_metadata_data); } catch (\Exception $e) { $this->ajax_error_list->push($e->getMessage()); } } // Revision $all_revisions_data = new Collection(); $entire_database->put("revisions", $all_revisions_data); foreach (Revision::all() as $revision) { try { $individual_revision_data = new Collection(); $individual_revision_data->put("id", $revision->id); $individual_revision_data->put("fid", $revision->fid); $individual_revision_data->put("rid", $revision->rid); $individual_revision_data->put("userId", $revision->userId); $individual_revision_data->put("owner", $revision->owner); $individual_revision_data->put("type", $revision->type); $individual_revision_data->put("data", $revision->data); $individual_revision_data->put("oldData", $revision->oldData); $individual_revision_data->put("rollback", $revision->rollback); $individual_revision_data->put("created_at", $revision->created_at->toDateTimeString()); $individual_revision_data->put("updated_at", $revision->updated_at->toDateTimeString()); $all_revisions_data->push($individual_revision_data); } catch (\Exception $e) { $this->ajax_error_list->push($e->getMessage()); } } } catch (\Exception $e) { $this->ajax_error_list->push($e->getMessage()); $this->ajaxResponse(false, "The backup failed, correct these errors and try again."); } return $entire_database; }