annotate sites/all/modules/views/handlers/views_handler_field_entity.inc @ 0:ff03f76ab3fe

initial version
author danieleb <danielebarchiesi@me.com>
date Wed, 21 Aug 2013 18:51:11 +0100
parents
children
rev   line source
danielebarchiesi@0 1 <?php
danielebarchiesi@0 2
danielebarchiesi@0 3 /**
danielebarchiesi@0 4 * @file
danielebarchiesi@0 5 * Definition of views_handler_field_entity.
danielebarchiesi@0 6 */
danielebarchiesi@0 7
danielebarchiesi@0 8 /**
danielebarchiesi@0 9 * A handler to display data from entity objects.
danielebarchiesi@0 10 *
danielebarchiesi@0 11 * Fields based upon this handler work with all query-backends if the tables
danielebarchiesi@0 12 * used by the query backend have an 'entity type' specified. In order to
danielebarchiesi@0 13 * make fields based upon this handler automatically available to all compatible
danielebarchiesi@0 14 * query backends, the views field can be defined in the table
danielebarchiesi@0 15 * @code views_entity_{ENTITY_TYPE} @endcode.
danielebarchiesi@0 16 *
danielebarchiesi@0 17 * @ingroup views_field_handlers
danielebarchiesi@0 18 */
danielebarchiesi@0 19 class views_handler_field_entity extends views_handler_field {
danielebarchiesi@0 20
danielebarchiesi@0 21 /**
danielebarchiesi@0 22 * Stores the entity type which is loaded by this field.
danielebarchiesi@0 23 */
danielebarchiesi@0 24 public $entity_type;
danielebarchiesi@0 25
danielebarchiesi@0 26 /**
danielebarchiesi@0 27 * Stores all entites which are in the result.
danielebarchiesi@0 28 */
danielebarchiesi@0 29 public $entities;
danielebarchiesi@0 30
danielebarchiesi@0 31 /**
danielebarchiesi@0 32 * The base field of the entity type assosiated with this field.
danielebarchiesi@0 33 */
danielebarchiesi@0 34 public $base_field;
danielebarchiesi@0 35
danielebarchiesi@0 36 /**
danielebarchiesi@0 37 * Initialize the entity type.
danielebarchiesi@0 38 */
danielebarchiesi@0 39 public function init(&$view, &$options) {
danielebarchiesi@0 40 parent::init($view, $options);
danielebarchiesi@0 41
danielebarchiesi@0 42 // Initialize the entity-type used.
danielebarchiesi@0 43 $table_data = views_fetch_data($this->table);
danielebarchiesi@0 44 $this->entity_type = $table_data['table']['entity type'];
danielebarchiesi@0 45 }
danielebarchiesi@0 46
danielebarchiesi@0 47 /**
danielebarchiesi@0 48 * Overriden to add the field for the entity id.
danielebarchiesi@0 49 */
danielebarchiesi@0 50 function query() {
danielebarchiesi@0 51 $this->table_alias = $base_table = $this->view->base_table;
danielebarchiesi@0 52 $this->base_field = $this->view->base_field;
danielebarchiesi@0 53
danielebarchiesi@0 54 if (!empty($this->relationship)) {
danielebarchiesi@0 55 foreach ($this->view->relationship as $relationship) {
danielebarchiesi@0 56 if ($relationship->alias == $this->relationship) {
danielebarchiesi@0 57 $base_table = $relationship->definition['base'];
danielebarchiesi@0 58 $this->table_alias = $relationship->alias;
danielebarchiesi@0 59
danielebarchiesi@0 60 $table_data = views_fetch_data($base_table);
danielebarchiesi@0 61 $this->base_field = empty($relationship->definition['base field']) ? $table_data['table']['base']['field'] : $relationship->definition['base field'];
danielebarchiesi@0 62 }
danielebarchiesi@0 63 }
danielebarchiesi@0 64 }
danielebarchiesi@0 65
danielebarchiesi@0 66 // Add the field if the query back-end implements an add_field() method,
danielebarchiesi@0 67 // just like the default back-end.
danielebarchiesi@0 68 if (method_exists($this->query, 'add_field')) {
danielebarchiesi@0 69 $this->field_alias = $this->query->add_field($this->table_alias, $this->base_field, '');
danielebarchiesi@0 70 }
danielebarchiesi@0 71
danielebarchiesi@0 72 $this->add_additional_fields();
danielebarchiesi@0 73 }
danielebarchiesi@0 74
danielebarchiesi@0 75 /**
danielebarchiesi@0 76 * Load the entities for all rows that are about to be displayed.
danielebarchiesi@0 77 */
danielebarchiesi@0 78 function pre_render(&$values) {
danielebarchiesi@0 79 if (!empty($values)) {
danielebarchiesi@0 80 list($this->entity_type, $this->entities) = $this->query->get_result_entities($values, !empty($this->relationship) ? $this->relationship : NULL, $this->field_alias);
danielebarchiesi@0 81 }
danielebarchiesi@0 82 }
danielebarchiesi@0 83
danielebarchiesi@0 84 /**
danielebarchiesi@0 85 * Overridden to return the entity object, or a certain property of the entity.
danielebarchiesi@0 86 */
danielebarchiesi@0 87 function get_value($values, $field = NULL) {
danielebarchiesi@0 88 if (isset($this->entities[$this->view->row_index])) {
danielebarchiesi@0 89 $entity = $this->entities[$this->view->row_index];
danielebarchiesi@0 90 // Support to get a certain part of the entity.
danielebarchiesi@0 91 if (isset($field) && isset($entity->{$field})) {
danielebarchiesi@0 92 return $entity->{$field};
danielebarchiesi@0 93 }
danielebarchiesi@0 94 // Support to get a part of the values as the normal get_value.
danielebarchiesi@0 95 elseif (isset($field) && isset($values->{$this->aliases[$field]})) {
danielebarchiesi@0 96 return $values->{$this->aliases[$field]};
danielebarchiesi@0 97 }
danielebarchiesi@0 98 else {
danielebarchiesi@0 99 return $entity;
danielebarchiesi@0 100 }
danielebarchiesi@0 101 }
danielebarchiesi@0 102 return FALSE;
danielebarchiesi@0 103 }
danielebarchiesi@0 104 }