Projet

Général

Profil

Paste
Télécharger (2,62 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / views / modules / field / views_handler_relationship_entity_reverse.inc @ 5d12d676

1 85ad3d82 Assos Assos
<?php
2
3
/**
4
 * @file
5
 * Definition of views_handler_relationship_entity_reverse.
6
 */
7
8
/**
9
 * A relationship handlers which reverse entity references.
10
 *
11
 * @ingroup views_relationship_handlers
12
 */
13 5d12d676 Assos Assos
class views_handler_relationship_entity_reverse extends views_handler_relationship {
14
15
  /**
16
   * {@inheritdoc}
17
   */
18
  public function init(&$view, &$options) {
19 85ad3d82 Assos Assos
    parent::init($view, $options);
20
21
    $this->field_info = field_info_field($this->definition['field_name']);
22
  }
23
24
  /**
25
   * Called to implement a relationship in a query.
26
   */
27 5d12d676 Assos Assos
  public function query() {
28 85ad3d82 Assos Assos
    $this->ensure_my_table();
29
    // First, relate our base table to the current base table to the
30
    // field, using the base table's id field to the field's column.
31
    $views_data = views_fetch_data($this->table);
32
    $left_field = $views_data['table']['base']['field'];
33
34
    $first = array(
35
      'left_table' => $this->table_alias,
36
      'left_field' => $left_field,
37
      'table' => $this->definition['field table'],
38
      'field' => $this->definition['field field'],
39
    );
40
    if (!empty($this->options['required'])) {
41
      $first['type'] = 'INNER';
42
    }
43
44
    if (!empty($this->definition['join_extra'])) {
45
      $first['extra'] = $this->definition['join_extra'];
46
    }
47
48
    if (!empty($this->definition['join_handler']) && class_exists($this->definition['join_handler'])) {
49
      $first_join = new $this->definition['join_handler'];
50
    }
51
    else {
52
      $first_join = new views_join();
53
    }
54
    $first_join->definition = $first;
55
    $first_join->construct();
56
    $first_join->adjusted = TRUE;
57
58
    $this->first_alias = $this->query->add_table($this->definition['field table'], $this->relationship, $first_join);
59
60
    // Second, relate the field table to the entity specified using
61
    // the entity id on the field table and the entity's id field.
62
    $second = array(
63
      'left_table' => $this->first_alias,
64
      'left_field' => 'entity_id',
65
      'table' => $this->definition['base'],
66
      'field' => $this->definition['base field'],
67
    );
68
69
    if (!empty($this->options['required'])) {
70
      $second['type'] = 'INNER';
71
    }
72
73
    if (!empty($this->definition['join_handler']) && class_exists($this->definition['join_handler'])) {
74
      $second_join = new $this->definition['join_handler'];
75
    }
76
    else {
77
      $second_join = new views_join();
78
    }
79
    $second_join->definition = $second;
80
    $second_join->construct();
81
    $second_join->adjusted = TRUE;
82
83 5d12d676 Assos Assos
    // Use a short alias for this.
84 85ad3d82 Assos Assos
    $alias = $this->definition['field_name'] . '_' . $this->table;
85
86
    $this->alias = $this->query->add_relationship($alias, $second_join, $this->definition['base'], $this->relationship);
87
  }
88 5d12d676 Assos Assos
89 85ad3d82 Assos Assos
}