/** * 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(); } } } }