/** * * Mass assign a value to many records at once, similar to update, but loops through all of them * * @param $pid * @param $fid * @param Request $request * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector */ public function massAssignRecords($pid, $fid, Request $request) { if (!$this->checkPermissions($fid, 'modify')) { return redirect()->back(); } $flid = $request->input("field_selection"); if (!is_numeric($flid)) { flash()->overlay("That is not a valid field"); return redirect()->back(); } if ($request->has($flid)) { $form_field_value = $request->input($flid); //Note this only works when there is one form element being submitted, so if you have more, check Date } else { flash()->overlay("You didn't provide a value to assign to the records", "Whoops."); return redirect()->back(); } if ($request->has("overwrite")) { $overwrite = $request->input("overwrite"); //Overwrite field in all records, even if it has data } else { $overwrite = 0; } $field = Field::find($flid); foreach (Form::find($fid)->records()->get() as $record) { if ($field->type == "Text") { $matching_record_fields = $record->textfields()->where("flid", '=', $flid)->get(); $record->updated_at = Carbon::now(); $record->save(); if ($matching_record_fields->count() > 0) { $textfield = $matching_record_fields->first(); if ($overwrite == true || $textfield->text == "" || is_null($textfield->text)) { $revision = RevisionController::storeRevision($record->rid, 'edit'); $textfield->text = $form_field_value; $textfield->save(); $revision->oldData = RevisionController::buildDataArray($record); $revision->save(); } else { continue; } } else { $tf = new TextField(); $revision = RevisionController::storeRevision($record->rid, 'edit'); $tf->flid = $field->flid; $tf->rid = $record->rid; $tf->text = $form_field_value; $tf->save(); $revision->oldData = RevisionController::buildDataArray($record); $revision->save(); } } elseif ($field->type == "Rich Text") { $matching_record_fields = $record->richtextfields()->where("flid", '=', $flid)->get(); $record->updated_at = Carbon::now(); $record->save(); if ($matching_record_fields->count() > 0) { $richtextfield = $matching_record_fields->first(); if ($overwrite == true || $richtextfield->rawtext == "" || is_null($richtextfield->rawtext)) { $revision = RevisionController::storeRevision($record->rid, 'edit'); $richtextfield->rawtext = $form_field_value; $richtextfield->save(); $revision->oldData = RevisionController::buildDataArray($record); $revision->save(); } else { continue; } } else { $rtf = new RichTextField(); $revision = RevisionController::storeRevision($record->rid, 'edit'); $rtf->flid = $field->flid; $rtf->rid = $record->rid; $rtf->rawtext = $form_field_value; $rtf->save(); $revision->oldData = RevisionController::buildDataArray($record); $revision->save(); } } elseif ($field->type == "Number") { $matching_record_fields = $record->numberfields()->where("flid", '=', $flid)->get(); $record->updated_at = Carbon::now(); $record->save(); if ($matching_record_fields->count() > 0) { $numberfield = $matching_record_fields->first(); if ($overwrite == true || $numberfield->number == "" || is_null($numberfield->number)) { $revision = RevisionController::storeRevision($record->rid, 'edit'); $numberfield->number = $form_field_value; $numberfield->save(); $revision->oldData = RevisionController::buildDataArray($record); $revision->save(); } else { continue; } } else { $nf = new NumberField(); $revision = RevisionController::storeRevision($record->rid, 'edit'); $nf->flid = $field->flid; $nf->rid = $record->rid; $nf->number = $form_field_value; $nf->save(); $revision->oldData = RevisionController::buildDataArray($record); $revision->save(); } } elseif ($field->type == "List") { $matching_record_fields = $record->listfields()->where("flid", '=', $flid)->get(); $record->updated_at = Carbon::now(); $record->save(); if ($matching_record_fields->count() > 0) { $listfield = $matching_record_fields->first(); if ($overwrite == true || $listfield->option == "" || is_null($listfield->option)) { $revision = RevisionController::storeRevision($record->rid, 'edit'); $listfield->option = $form_field_value; $listfield->save(); $revision->oldData = RevisionController::buildDataArray($record); $revision->save(); } else { continue; } } else { $lf = new ListField(); $revision = RevisionController::storeRevision($record->rid, 'edit'); $lf->flid = $field->flid; $lf->rid = $record->rid; $lf->option = $form_field_value; $lf->save(); $revision->oldData = RevisionController::buildDataArray($record); $revision->save(); } } elseif ($field->type == "Multi-Select List") { $matching_record_fields = $record->multiselectlistfields()->where("flid", '=', $flid)->get(); $record->updated_at = Carbon::now(); $record->save(); if ($matching_record_fields->count() > 0) { $multiselectlistfield = $matching_record_fields->first(); if ($overwrite == true || $multiselectlistfield->options == "" || is_null($multiselectlistfield->options)) { $revision = RevisionController::storeRevision($record->rid, 'edit'); $multiselectlistfield->options = implode("[!]", $form_field_value); $multiselectlistfield->save(); $revision->oldData = RevisionController::buildDataArray($record); $revision->save(); } else { continue; } } else { $mslf = new MultiSelectListField(); $revision = RevisionController::storeRevision($record->rid, 'edit'); $mslf->flid = $field->flid; $mslf->rid = $record->rid; $mslf->options = implode("[!]", $form_field_value); $mslf->save(); $revision->oldData = RevisionController::buildDataArray($record); $revision->save(); } } elseif ($field->type == "Generated List") { $matching_record_fields = $record->generatedlistfields()->where("flid", '=', $flid)->get(); $record->updated_at = Carbon::now(); $record->save(); if ($matching_record_fields->count() > 0) { $generatedlistfield = $matching_record_fields->first(); if ($overwrite == true || $generatedlistfield->options == "" || is_null($generatedlistfield->options)) { $revision = RevisionController::storeRevision($record->rid, 'edit'); $generatedlistfield->options = implode("[!]", $form_field_value); $generatedlistfield->save(); $revision->oldData = RevisionController::buildDataArray($record); $revision->save(); } else { continue; } } else { $glf = new GeneratedListField(); $revision = RevisionController::storeRevision($record->rid, 'edit'); $glf->flid = $field->flid; $glf->rid = $record->rid; $glf->options = implode("[!]", $form_field_value); $glf->save(); $revision->oldData = RevisionController::buildDataArray($record); $revision->save(); } } elseif ($field->type == "Date") { $matching_record_fields = $record->datefields()->where("flid", '=', $flid)->get(); $record->updated_at = Carbon::now(); $record->save(); if ($matching_record_fields->count() > 0) { $datefield = $matching_record_fields->first(); if ($overwrite == true || $datefield->month == "" || is_null($datefield->month)) { $revision = RevisionController::storeRevision($record->rid, 'edit'); $datefield->circa = $request->input('circa_' . $flid, ''); $datefield->month = $request->input('month_' . $flid); $datefield->day = $request->input('day_' . $flid); $datefield->year = $request->input('year_' . $flid); $datefield->era = $request->input('era_' . $flid, 'CE'); $datefield->save(); $revision->oldData = RevisionController::buildDataArray($record); $revision->save(); } else { continue; } } else { $df = new DateField(); $revision = RevisionController::storeRevision($record->rid, 'edit'); $df->circa = $request->input('circa_' . $flid, ''); $df->month = $request->input('month_' . $flid); $df->day = $request->input('day_' . $flid); $df->year = $request->input('year_' . $flid); $df->era = $request->input('era_' . $flid, 'CE'); $df->rid = $record->rid; $df->flid = $flid; $df->save(); $revision->oldData = RevisionController::buildDataArray($record); $revision->save(); } } elseif ($field->type == "Schedule") { $matching_record_fields = $record->schedulefields()->where("flid", '=', $flid)->get(); $record->updated_at = Carbon::now(); $record->save(); if ($matching_record_fields->count() > 0) { $schedulefield = $matching_record_fields->first(); if ($overwrite == true || $schedulefield->events == "" || is_null($schedulefield->events)) { $revision = RevisionController::storeRevision($record->rid, 'edit'); $schedulefield->events = implode("[!]", $form_field_value); $schedulefield->save(); $revision->oldData = RevisionController::buildDataArray($record); $revision->save(); } else { continue; } } else { $sf = new ScheduleField(); $revision = RevisionController::storeRevision($record->rid, 'edit'); $sf->flid = $field->flid; $sf->rid = $record->rid; $sf->events = implode("[!]", $form_field_value); $sf->save(); $revision->oldData = RevisionController::buildDataArray($record); $revision->save(); } } elseif ($field->type == "Geolocator") { $matching_record_fields = $record->geolocatorfields()->where("flid", '=', $flid)->get(); $record->updated_at = Carbon::now(); $record->save(); if ($matching_record_fields->count() > 0) { $geolocatorfield = $matching_record_fields->first(); if ($overwrite == true || $geolocatorfield->locations == "" || is_null($geolocatorfield->locations)) { $revision = RevisionController::storeRevision($record->rid, 'edit'); $geolocatorfield->locations = implode("[!]", $form_field_value); $geolocatorfield->save(); $revision->oldData = RevisionController::buildDataArray($record); $revision->save(); } else { continue; } } else { $gf = new GeolocatorField(); $revision = RevisionController::storeRevision($record->rid, 'edit'); $gf->flid = $field->flid; $gf->rid = $record->rid; $gf->locations = implode("[!]", $form_field_value); $gf->save(); $revision->oldData = RevisionController::buildDataArray($record); $revision->save(); } } } flash()->overlay("The records were updated", "Good Job!"); return redirect()->action('RecordController@index', compact('pid', 'fid')); }
/** * Does the actual rolling back using the data array from a particular revision. * * @param Record $record * @param Form $form * @param Revision $revision * @param $flag */ public static function redo(Record $record, Form $form, Revision $revision, $flag) { $data = json_decode($revision->data, true); if ($flag) { $new_revision = RevisionController::storeRevision($record->rid, 'rollback'); $new_revision->oldData = $revision->data; $new_revision->save(); } foreach ($form->fields()->get() as $field) { if ($field->type == 'Text') { if ($revision->type != 'delete') { foreach ($record->textfields()->get() as $textfield) { if ($textfield->flid == $field->flid) { $textfield->text = $data['textfields'][$field->flid]['data']; $textfield->save(); } } } else { $textfield = new TextField(); $textfield->flid = $field->flid; $textfield->rid = $record->rid; $textfield->text = $data['textfields'][$field->flid]['data']; $textfield->save(); } } elseif ($field->type == 'Rich Text') { if ($revision->type != 'delete') { foreach ($record->richtextfields()->get() as $rtfield) { if ($rtfield->flid == $field->flid) { $rtfield['rawtext'] = $data['richtextfields'][$field->flid]['data']; $rtfield->save(); } } } else { $rtfield = new RichTextField(); $rtfield->flid = $field->flid; $rtfield->rid = $record->rid; $rtfield->rawtext = $data['richtextfields'][$field->flid]['data']; $rtfield->save(); } } elseif ($field->type == 'Number') { if ($revision->type != 'delete') { foreach ($record->numberfields()->get() as $numberfield) { if ($numberfield->flid == $field->flid) { $numberfield['number'] = $data['numberfields'][$field->flid]['data']; $numberfield->save(); } } } else { $numberfield = new NumberField(); $numberfield->flid = $field->flid; $numberfield->rid = $record->rid; $numberfield->number = $data['numberfields'][$field->flid]['data']; $numberfield->save(); } } elseif ($field->type == 'List') { if ($revision->type != 'delete') { foreach ($record->listfields()->get() as $listfield) { if ($listfield->flid == $field->flid) { $listfield['option'] = $data['listfields'][$field->flid]['data']; $listfield->save(); } } } else { $listfield = new ListField(); $listfield->flid = $field->flid; $listfield->rid = $record->rid; $listfield->option = $data['listfields'][$field->flid]['data']; $listfield->save(); } } elseif ($field->type == 'Multi-Select List') { if ($revision->type != 'delete') { foreach ($record->multiselectlistfields()->get() as $mslfield) { if ($mslfield->flid == $field->flid) { $mslfield['options'] = $data['multiselectlistfields'][$field->flid]['data']; $mslfield->save(); } } } else { $mslfield = new MultiSelectListField(); $mslfield->flid = $field->flid; $mslfield->rid = $record->rid; $mslfield->options = $data['multiselectlistfields'][$field->flid]['data']; $mslfield->save(); } } elseif ($field->type == 'Generated List') { if ($revision->type != 'delete') { foreach ($record->generatedlistfields()->get() as $genlistfield) { if ($genlistfield->flid == $field->flid) { $genlistfield['options'] = $data['generatedlistfields'][$field->flid]['data']; $genlistfield->save(); } } } else { $genlistfield = new GeneratedListField(); $genlistfield->flid = $field->flid; $genlistfield->rid = $record->rid; $genlistfield->options = $data['generatedlistfields'][$field->flid]['data']; $genlistfield->save(); } } elseif ($field->type == 'Date') { if ($revision->type != 'delete') { foreach ($record->datefields()->get() as $datefield) { if ($datefield->flid == $field->flid) { $datefield['circa'] = $data['datefields'][$field->flid]['data']['circa']; $datefield['month'] = $data['datefields'][$field->flid]['data']['month']; $datefield['day'] = $data['datefields'][$field->flid]['data']['day']; $datefield['year'] = $data['datefields'][$field->flid]['data']['year']; $datefield['era'] = $data['datefields'][$field->flid]['data']['era']; $datefield->save(); } } } else { $datefield = new DateField(); $datefield->flid = $field->flid; $datefield->rid = $record->rid; $datefield->circa = $data['datefields'][$field->flid]['data']['circa']; $datefield->month = $data['datefields'][$field->flid]['data']['month']; $datefield->day = $data['datefields'][$field->flid]['data']['day']; $datefield->year = $data['datefields'][$field->flid]['data']['year']; $datefield->era = $data['datefields'][$field->flid]['data']['era']; $datefield->save(); } } elseif ($field->type == 'Schedule') { if ($revision->type != 'delete') { foreach ($record->schedulefields()->get() as $schedulefield) { if ($schedulefield->flid == $field->flid) { $schedulefield['events'] = $data['schedulefields'][$field->flid]['data']; $schedulefield->save(); } } } else { $schedulefield = new ScheduleField(); $schedulefield->flid = $field->flid; $schedulefield->rid = $record->rid; $schedulefield->events = $data['schedulefields'][$field->flid]['data']; $schedulefield->save(); } } } }