• Main Page
  • Related Pages
  • Modules
  • Classes
  • Files
  • File List
  • File Members

modules/profile.views.inc

Go to the documentation of this file.
00001 <?php
00016 function profile_views_data() {
00017   $data['profile_values']['moved to'] = 'profile_value';
00018   // Define the base group of this table. Fields that don't
00019   // have a group defined will go into this field by default.
00020   $data['profile_value']['table']['group']  = t('Profile');
00021 
00022   $data['profile_value']['table']['join'] = array(
00023     'node' => array(
00024       'left_table' => 'profile_value',
00025       'left_field' => 'uid',
00026       'field' => 'uid',
00027     ),
00028     'users' => array(
00029       'left_table' => 'profile_value',
00030       'left_field' => 'uid',
00031       'field' => 'uid',
00032     ),
00033   );
00034 
00035   $fields = profile_views_get_fields();
00036   foreach ($fields as $field) {
00037     $table_name = 'profile_value_' . str_replace('-', '_', $field->name);
00038     $data[$table_name] = array(
00039       'table' => array(
00040         'group' => t('Profile'),
00041         'join' => array(
00042           'node' => array(
00043             'table' => 'profile_value',
00044             'left_table' => 'users',
00045             'left_field' => 'uid',
00046             'field' => 'uid',
00047             'extra' => array(array('field' => 'fid', 'value' => $field->fid)),
00048           ),
00049           'users' => array(
00050             'table' => 'profile_value',
00051             'left_field' => 'uid',
00052             'field' => 'uid',
00053             'extra' => array(array('field' => 'fid', 'value' => $field->fid)),
00054           ),
00055         ),
00056       ),
00057     );
00058     // All fields in the table are named 'value'.
00059     $data[$table_name]['value'] = profile_views_fetch_field($field);
00060   }
00061 
00062   return $data;
00063 }
00064 
00068 function profile_views_get_fields() {
00069   static $fields = NULL;
00070 
00071   if (!isset($fields)) {
00072     $fields = array();
00073     $results = db_query("SELECT * FROM {profile_field} ORDER BY category, weight");
00074 
00075     foreach ($results as $row) {
00076       if (!empty($row->options)) {
00077         if (!in_array(substr($row->options, 0, 2), array('a:', 'b:', 'i:', 'f:', 'o:', 's:', ))) {
00078           // unserialized fields default version
00079           $options = $row->options;
00080           unset($row->options);
00081           $row->options = $options;
00082         }
00083         else {
00084           // serialized fields or modified version
00085           $row->options = unserialize(db_decode_blob($row->options));
00086         }
00087       }
00088       $fields[$row->fid] = $row;
00089     }
00090   }
00091   return $fields;
00092 }
00093 
00094 
00098 function profile_views_fetch_field($field) {
00099   $data = array(
00100     'title' => t('@category: @field-name', array('@category' => $field->category, '@field-name' => $field->title)),
00101   );
00102 
00103   // Add fields specific to the profile type.
00104   switch ($field->type) {
00105     case 'textfield':
00106       $data += array(
00107         'help' => t('Profile textfield'),
00108         'field' => array(
00109           'handler' => 'views_handler_field_user',
00110           'click sortable' => TRUE,
00111         ),
00112         'sort' => array(
00113           'handler' => 'views_handler_sort',
00114         ),
00115         'filter' => array(
00116           'handler' => 'views_handler_filter_string',
00117         ),
00118         'argument' => array(
00119           'handler' => 'views_handler_argument_string',
00120         ),
00121       );
00122 
00123       break;
00124     case 'textarea':
00125       $data += array(
00126         'help' => t('Profile textarea'),
00127         'field' => array(
00128           'handler' => 'views_handler_field_markup',
00129           'format' => filter_default_format(),
00130         ),
00131         'sort' => array(
00132           'handler' => 'views_handler_sort',
00133         ),
00134         'filter' => array(
00135           'handler' => 'views_handler_filter_string',
00136         ),
00137       );
00138 
00139       break;
00140     case 'checkbox':
00141       $data += array(
00142         'help' => t('Profile checkbox'),
00143         'field' => array(
00144           'handler' => 'views_handler_field_boolean',
00145           'click sortable' => TRUE,
00146         ),
00147         'sort' => array(
00148           'handler' => 'views_handler_sort',
00149         ),
00150         'filter' => array(
00151           'handler' => 'views_handler_filter_boolean_operator',
00152           'accept null' => TRUE,
00153         ),
00154         // @todo there ought to be a boolean argument handler
00155       );
00156 
00157       break;
00158     case 'url':
00159       $data += array(
00160         'help' => t('Profile URL'),
00161         'field' => array(
00162           'handler' => 'views_handler_field_url',
00163           'click sortable' => TRUE,
00164         ),
00165         'sort' => array(
00166           'handler' => 'views_handler_sort',
00167         ),
00168         'filter' => array(
00169           'handler' => 'views_handler_filter_string',
00170         ),
00171       );
00172 
00173       break;
00174     case 'selection':
00175       $data += array(
00176         'help' => t('Profile selection'),
00177         'field' => array(
00178           'handler' => 'views_handler_field',
00179           'click sortable' => TRUE,
00180         ),
00181         'sort' => array(
00182           'handler' => 'views_handler_sort',
00183         ),
00184         'filter' => array(
00185           'handler' => 'views_handler_filter_profile_selection',
00186           'fid' => $field->fid,
00187         ),
00188         'argument' => array(
00189           'handler' => 'views_handler_argument_string',
00190         ),
00191       );
00192 
00193       break;
00194     case 'list':
00195       $data += array(
00196         'help' => t('Profile freeform list %field-name.', array('%field-name' => $field->title)),
00197         'field' => array(
00198           'handler' => 'views_handler_field_profile_list',
00199           'no group by' => TRUE,
00200         ),
00201         'filter' => array(
00202           'handler' => 'views_handler_filter_string',
00203         ),
00204       );
00205 
00206       break;
00207     case 'date':
00208       $data += array(
00209         'help' => t('Profile date %field-name.', array('%field-name' => $field->title)),
00210         'field' => array(
00211           'handler' => 'views_handler_field_profile_date',
00212         ),
00213       );
00214 
00215       break;
00216   }
00217 
00218   // @todo: add access control to hidden fields.
00219   return $data;
00220 }
00221 

Generated on Sun Feb 26 2012 12:52:51 for Views by  doxygen 1.7.1