/** * Builds up an array that functions similarly to the field object. Json encoded for storage. * * @param Record $record * @return string */ public static function buildDataArray(Record $record) { $data = array(); if (!is_null($record->textfields()->first())) { $text = array(); $textfields = $record->textfields()->get(); foreach ($textfields as $textfield) { $name = Field::where('flid', '=', $textfield->flid)->first()->name; $text[$textfield->flid]['name'] = $name; $text[$textfield->flid]['data'] = $textfield->text; } $data['textfields'] = $text; } else { $data['textfields'] = null; } if (!is_null($record->richtextfields()->first())) { $richtext = array(); $rtfields = $record->richtextfields()->get(); foreach ($rtfields as $rtfield) { $name = Field::where('flid', '=', $rtfield->flid)->first()->name; $richtext[$rtfield->flid]['name'] = $name; $richtext[$rtfield->flid]['data'] = $rtfield->rawtext; } $data['richtextfields'] = $richtext; } else { $data['richtextfields'] = null; } if (!is_null($record->numberfields()->first())) { $number = array(); $numberfields = $record->numberfields()->get(); foreach ($numberfields as $numberfield) { $fieldactual = Field::where('flid', '=', $numberfield->flid)->first(); $name = $fieldactual->name; $numberdata = array(); $numberdata['number'] = $numberfield->number; if ($numberfield->number != '') { $numberdata['unit'] = FieldController::getFieldOption($fieldactual, 'Unit'); } else { $numberdata['unit'] = ''; } $number[$numberfield->flid]['name'] = $name; $number[$numberfield->flid]['data'] = $numberdata; } $data['numberfields'] = $number; } else { $data['numberfields'] = null; } if (!is_null($record->listfields()->first())) { $list = array(); $listfields = $record->listfields()->get(); foreach ($listfields as $listfield) { $name = Field::where('flid', '=', $listfield->flid)->first()->name; $list[$listfield->flid]['name'] = $name; $list[$listfield->flid]['data'] = $listfield->option; } $data['listfields'] = $list; } else { $data['listfields'] = null; } if (!is_null($record->multiselectlistfields()->first())) { $msl = array(); $mslfields = $record->multiselectlistfields()->get(); foreach ($mslfields as $mslfield) { $name = Field::where('flid', '=', $mslfield->flid)->first()->name; $msl[$mslfield->flid]['name'] = $name; $msl[$mslfield->flid]['data'] = $mslfield->options; } $data['multiselectlistfields'] = $msl; } else { $data['multiselectlistfields'] = null; } if (!is_null($record->generatedlistfields()->first())) { $genlist = array(); $genlistfields = $record->generatedlistfields()->get(); foreach ($genlistfields as $genlistfield) { $name = Field::where('flid', '=', $genlistfield->flid)->first()->name; $genlist[$genlistfield->flid]['name'] = $name; $genlist[$genlistfield->flid]['data'] = $genlistfield->options; } $data['generatedlistfields'] = $genlist; } else { $data['generatedlistfields'] = null; } if (!is_null($record->datefields()->first())) { $date = array(); $datefields = $record->datefields()->get(); foreach ($datefields as $datefield) { $fieldactual = Field::where('flid', '=', $datefield->flid)->first(); $name = $fieldactual->name; $datedata = array(); $datedata['format'] = FieldController::getFieldOption($fieldactual, 'Format'); if (FieldController::getFieldOption($fieldactual, 'Circa') == 'Yes') { $datedata['circa'] = $datefield->circa; } else { $datedata['circa'] = ''; } $datedata['day'] = $datefield->day; $datedata['month'] = $datefield->month; $datedata['year'] = $datefield->year; if (FieldController::getFieldOption($fieldactual, 'Era') == 'Yes') { $datedata['era'] = $datefield->era; } else { $datedata['era'] = ''; } $date[$datefield->flid]['name'] = $name; $date[$datefield->flid]['data'] = $datedata; } $data['datefields'] = $date; } else { $data['datefields'] = null; } if (!is_null($record->schedulefields()->first())) { $schedule = array(); $schedulefields = $record->schedulefields()->get(); foreach ($schedulefields as $schedulefield) { $name = Field::where('flid', '=', $schedulefield->flid)->first()->name; $schedule[$schedulefield->flid]['name'] = $name; $schedule[$schedulefield->flid]['data'] = $schedulefield->events; } $data['schedulefields'] = $schedule; } else { $data['schedulefields'] = null; } /* Have to see which method is better, for now we'll use json_encode (remember to use json_decode($array, true)). Alternative method is presented here. The base64_encode method might end up working better for data other than simple text and lists. $revision->data = base64_encode(serialize($record)); To decode: $decode = unserialize(base64_decode(serialize($revision->data))); */ return json_encode($data); }