Projet

Général

Profil

Paste
Télécharger (5,63 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / views / modules / profile.views.inc @ 7547bb19

1
<?php
2

    
3
/**
4
 * @file
5
 * Provide views data and handlers for user.module.
6
 *
7
 * @ingroup views_module_handlers
8
 */
9

    
10
/**
11
 * Implements hook_views_data().
12
 */
13
function profile_views_data() {
14
  $data['profile_values']['moved to'] = 'profile_value';
15
  // Define the base group of this table. Fields that don't
16
  // have a group defined will go into this field by default.
17
  $data['profile_value']['table']['group']  = t('Profile');
18

    
19
  $data['profile_value']['table']['join'] = array(
20
    'node' => array(
21
      'left_table' => 'profile_value',
22
      'left_field' => 'uid',
23
      'field' => 'uid',
24
    ),
25
    'users' => array(
26
      'left_table' => 'profile_value',
27
      'left_field' => 'uid',
28
      'field' => 'uid',
29
    ),
30
  );
31

    
32
  $fields = profile_views_get_fields();
33
  foreach ($fields as $field) {
34
    $table_name = 'profile_value_' . str_replace('-', '_', $field->name);
35
    $data[$table_name] = array(
36
      'table' => array(
37
        'group' => t('Profile'),
38
        'join' => array(
39
          'node' => array(
40
            'table' => 'profile_value',
41
            'left_table' => 'users',
42
            'left_field' => 'uid',
43
            'field' => 'uid',
44
            'extra' => array(array('field' => 'fid', 'value' => $field->fid)),
45
          ),
46
          'users' => array(
47
            'table' => 'profile_value',
48
            'left_field' => 'uid',
49
            'field' => 'uid',
50
            'extra' => array(array('field' => 'fid', 'value' => $field->fid)),
51
          ),
52
        ),
53
      ),
54
    );
55
    // All fields in the table are named 'value'.
56
    $data[$table_name]['value'] = profile_views_fetch_field($field);
57
  }
58

    
59
  return $data;
60
}
61

    
62
/**
63
 * Get all profile fields
64
 */
65
function profile_views_get_fields() {
66
  static $fields = NULL;
67

    
68
  if (!isset($fields)) {
69
    $fields = array();
70
    $results = db_query("SELECT * FROM {profile_field} ORDER BY category, weight");
71

    
72
    foreach ($results as $row) {
73
      if (!empty($row->options)) {
74
        if (!in_array(substr($row->options, 0, 2), array('a:', 'b:', 'i:', 'f:', 'o:', 's:', ))) {
75
          // unserialized fields default version
76
          $options = $row->options;
77
          unset($row->options);
78
          $row->options = $options;
79
        }
80
        else {
81
          // serialized fields or modified version
82
          $row->options = unserialize($row->options);
83
        }
84
      }
85
      $fields[$row->fid] = $row;
86
    }
87
  }
88
  return $fields;
89
}
90

    
91

    
92
/**
93
 * Add profile fields to view table
94
 */
95
function profile_views_fetch_field($field) {
96
  $data = array(
97
    'title' => t('@category: @field-name', array('@category' => $field->category, '@field-name' => $field->title)),
98
  );
99

    
100
  // Add fields specific to the profile type.
101
  switch ($field->type) {
102
    case 'textfield':
103
      $data += array(
104
        'help' => t('Profile textfield'),
105
        'field' => array(
106
          'handler' => 'views_handler_field_user',
107
          'click sortable' => TRUE,
108
        ),
109
        'sort' => array(
110
          'handler' => 'views_handler_sort',
111
        ),
112
        'filter' => array(
113
          'handler' => 'views_handler_filter_string',
114
        ),
115
        'argument' => array(
116
          'handler' => 'views_handler_argument_string',
117
        ),
118
      );
119

    
120
      break;
121
    case 'textarea':
122
      $data += array(
123
        'help' => t('Profile textarea'),
124
        'field' => array(
125
          'handler' => 'views_handler_field_markup',
126
          'format' => filter_default_format(),
127
        ),
128
        'sort' => array(
129
          'handler' => 'views_handler_sort',
130
        ),
131
        'filter' => array(
132
          'handler' => 'views_handler_filter_string',
133
        ),
134
      );
135

    
136
      break;
137
    case 'checkbox':
138
      $data += array(
139
        'help' => t('Profile checkbox'),
140
        'field' => array(
141
          'handler' => 'views_handler_field_boolean',
142
          'click sortable' => TRUE,
143
        ),
144
        'sort' => array(
145
          'handler' => 'views_handler_sort',
146
        ),
147
        'filter' => array(
148
          'handler' => 'views_handler_filter_boolean_operator',
149
          'accept null' => TRUE,
150
        ),
151
        // @todo there ought to be a boolean argument handler
152
      );
153

    
154
      break;
155
    case 'url':
156
      $data += array(
157
        'help' => t('Profile URL'),
158
        'field' => array(
159
          'handler' => 'views_handler_field_url',
160
          'click sortable' => TRUE,
161
        ),
162
        'sort' => array(
163
          'handler' => 'views_handler_sort',
164
        ),
165
        'filter' => array(
166
          'handler' => 'views_handler_filter_string',
167
        ),
168
      );
169

    
170
      break;
171
    case 'selection':
172
      $data += array(
173
        'help' => t('Profile selection'),
174
        'field' => array(
175
          'handler' => 'views_handler_field',
176
          'click sortable' => TRUE,
177
        ),
178
        'sort' => array(
179
          'handler' => 'views_handler_sort',
180
        ),
181
        'filter' => array(
182
          'handler' => 'views_handler_filter_profile_selection',
183
          'fid' => $field->fid,
184
        ),
185
        'argument' => array(
186
          'handler' => 'views_handler_argument_string',
187
        ),
188
      );
189

    
190
      break;
191
    case 'list':
192
      $data += array(
193
        'help' => t('Profile freeform list %field-name.', array('%field-name' => $field->title)),
194
        'field' => array(
195
          'handler' => 'views_handler_field_profile_list',
196
          'no group by' => TRUE,
197
        ),
198
        'filter' => array(
199
          'handler' => 'views_handler_filter_string',
200
        ),
201
      );
202

    
203
      break;
204
    case 'date':
205
      $data += array(
206
        'help' => t('Profile date %field-name.', array('%field-name' => $field->title)),
207
        'field' => array(
208
          'handler' => 'views_handler_field_profile_date',
209
        ),
210
      );
211

    
212
      break;
213
  }
214

    
215
  // @todo: add access control to hidden fields.
216
  return $data;
217
}