Пример #1
0
 /**
  * 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);
 }