예제 #1
0
 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;
 }