00001 <?php
00016 function profile_views_data() {
00017 $data['profile_values']['moved to'] = 'profile_value';
00018
00019
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
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
00079 $options = $row->options;
00080 unset($row->options);
00081 $row->options = $options;
00082 }
00083 else {
00084
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
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
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
00219 return $data;
00220 }
00221