/** * Returns a field collection * * @param mixed $entity ElggEntity or an array of entity attributes * @param string $action Action name (used as a plugin hook type) * @param array $params Additional context params to pass to the hook * @return \hypeJunction\Prototyper\Elements\FieldCollection */ public function fields($entity = array(), $action = 'all', array $params = array()) { $fieldCollection = array(); $entity = $this->entityFactory->build($entity); if ($entity instanceof \ElggEntity) { $params['entity'] = $entity; $fields = (array) elgg_trigger_plugin_hook('prototype', $action, $params, array()); $attribute_names = $this->entityFactory->getAttributeNames($entity); if (!$entity->guid) { $fields['type'] = array('type' => 'hidden'); $fields['subtype'] = array('type' => 'hidden'); $fields['owner_guid'] = array('type' => 'hidden'); $fields['container_guid'] = array('type' => 'hidden'); } else { $fields['guid'] = array('type' => 'hidden'); } foreach ($fields as $shortname => $field) { $field['entity_type'] = $entity->getType(); $field['entity_subtype'] = $entity->getSubtype(); if (empty($field['shortname'])) { $field['shortname'] = $shortname; } if (in_array($shortname, $attribute_names)) { $field['data_type'] = 'attribute'; $field['class_name'] = Elements\AttributeField::CLASSNAME; } $fieldObj = $this->fieldFactory->build($field); if ($fieldObj instanceof Elements\Field) { $fieldCollection[] = $fieldObj; } } } return new Elements\FieldCollection($fieldCollection); }