Example #1
0
 /**
  * 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();
             }
         }
     }
 }