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 }
|