/** * Setup the property's display value before its assigned to the object row. * * This method is useful for classes using this trait. * * @param ModelInterface $object The current row's object. * @param PropertyInterface $property The current property. * @return void */ protected function setupDisplayPropertyValue(ModelInterface $object, PropertyInterface $property) { $displayType = $property->displayType(); $this->display = $this->propertyDisplayFactory()->create($displayType); $this->display->setDisplayType($displayType); $this->display->setProperty($property); $metadata = $property->metadata(); $objMetadata = $object->metadata()->property($property->ident()); if ($objMetadata) { $metadata->setData($objMetadata); } $this->display->setData($metadata); $this->display->setData($property->viewOptions($displayType)); }
/** * Get all the fields of a model. * * @param ModelInterface $model The model to get fields from. * @param array|null $properties Optional list of properties to get. If null, retrieve all (from metadata). * @return array * @todo Move this method in StorableTrait or AbstractModel */ private function getModelFields(ModelInterface $model, $properties = null) { if ($properties === null) { // No custom properties; use all (from model metadata) $properties = array_keys($model->metadata()->properties()); } else { // Ensure the key is always in the required fields. $properties = array_merge($properties, [$model->key()]); } $fields = []; foreach ($properties as $propertyIdent) { $p = $model->p($propertyIdent); if (!$p || !$p->active() || !$p->storable()) { continue; } $v = $model->propertyValue($propertyIdent); foreach ($p->fields($v) as $fieldIdent => $field) { $fields[$field->ident()] = $field; } } return $fields; }