/** * Returns JSON containing information used to build the edit view for a record * @todo: Put all of the field formatting in the field component * @since 0.0.9 */ public function actionRecordEdit() { $data = $this->parseRequest(['id' => 0]); $response['error'] = null; /** * @var RecordEntity $record */ if ($data['id'] > 0 && ($record = Record::getValidRecordWithId($data['id']))) { Record::prepare($record); $response['essential'] = Record::getFormattedData($record); $fieldsEditData = []; /** * @var FieldEntity[] $fields */ $fields = Field::getValidFields(); foreach ($fields as $field) { $fieldEditData['id'] = $field->getId(); $fieldEditData['name'] = $field->getName(); $fieldEditData['type'] = $field->getType(); $fieldEditData['has_default'] = $field->hasDefault(); $fieldEditData['allow_other'] = $field->isAllowOther(); $fieldEditData['is_multiple'] = $field->isMultiple(); $defaults = $field->getDefaults(); $defaultArray = []; foreach ($defaults as $default) { $defaultArray[] = $default->getValue(); } $fieldEditData['defaults'] = $defaultArray; $fieldData = $record->findOrCreateData($field->getId()); if ($field->hasDefault()) { if ($field->isMultiple()) { $value = unserialize($fieldData->getLongText()); } else { if ($fieldData->isDefault() || !$field->isAllowOther()) { $value = $fieldData->getInt(); } else { $value = $fieldData->getVarchar(); } } } else { if ($field->isMultiple()) { $value = unserialize($fieldData->getLongText()); } else { $value = Data::serialize($fieldData); } } $fieldEditData['value'] = $value; $fieldsEditData[] = $fieldEditData; } $response['data'] = $fieldsEditData; } else { $response['error'] = ['id' => 1, 'description' => 'The supplied ID is invalid!']; } echo json_encode($response); }