View source
<?php
function webform_mysql_views_views_data_alter(&$data) {
if (module_exists('data')) {
$webform_mysql_views = variable_get('webform_mysql_views_views', array());
foreach ($webform_mysql_views as $nid => $dbview_name) {
$node = node_load($nid);
_webform_mysql_views_designate_primarykey($dbview_name, 'sid', $data);
$data[$dbview_name]['table']['group'] = $data[$dbview_name]['base']['title'] = $data[$dbview_name]['table']['base']['title'] = t('Webform: @title', array(
'@title' => $node->title,
));
$data[$dbview]['table']['join'] = array(
'webform_submissions' => array(
'left_field' => 'sid',
'field' => sid,
),
);
$data[$dbview_name]['sid']['title'] = t('Submission ID');
$data[$dbview_name]['sid']['help'] = t('The unique ID of the submission.');
$data[$dbview_name]['sid']['relationship'] = array(
'base' => 'webform_submissions',
'field' => 'sid',
'handler' => 'views_handler_relationship',
'label' => t('Webform submissions'),
);
$result = db_query('SELECT c.cid, c.name, c.form_key, p.form_key AS parent_key, p.name AS parent, c.type FROM {webform_component} c LEFT JOIN {webform_component} p ON (c.pid = p.cid) WHERE c.nid = %d AND c.type != "fieldset" ORDER BY c.weight ASC, c.cid ASC', $nid);
while ($row = db_fetch_array($result)) {
$column = _webform_mysql_views_column_name($row);
$data[$dbview_name][$column]['title'] = empty($row['parent']) ? $row['name'] : $row['name'] . ' (' . $row['parent'] . ')';
if (empty($row['parent'])) {
$data[$dbview_name][$column]['field']['help'] = t('The @field field on the @webform webform.', array(
'@field' => $row['name'],
'@webform' => $node->title,
));
}
else {
$data[$dbview_name][$column]['field']['help'] = t('The @field field in the @parent fieldset on the @webform webform.', array(
'@field' => $row['name'],
'@webform' => $node->title,
'@parent' => $row['parent'],
));
}
if ($row['type'] == 'number') {
$data[$dbview_name][$column]['field']['handler'] = 'views_handler_field_numeric';
$data[$dbview_name][$column]['field']['click sortable'] = TRUE;
$data[$dbview_name][$column]['sort']['handler'] = 'views_handler_sort_numeric';
$data[$dbview_name][$column]['filter']['handler'] = 'views_handler_filter_group_by_numeric';
$data[$dbview_name][$column]['argument']['handler'] = 'views_handler_argument_numeric';
}
else {
if ($row['type'] == 'select') {
$data[$dbview_name][$column]['field'] = array(
'handler' => 'webform_mysql_views_handler_field_select',
'options callback' => '_webform_mysql_views_select_options',
'options arguments' => array(
$nid,
$row['cid'],
),
);
$data[$dbview_name][$column]['field']['click sortable'] = TRUE;
$data[$dbview_name][$column]['sort']['handler'] = 'views_handler_sort';
$data[$dbview_name][$column]['argument']['handler'] = 'views_handler_argument_string';
$data[$dbview_name][$column]['filter'] = array(
'handler' => views_api_version() == 3 ? 'views_handler_filter_in_operator' : 'webform_mysql_views_handler_select_filter',
'options callback' => '_webform_mysql_views_select_options',
'options arguments' => array(
$nid,
$row['cid'],
),
);
}
else {
if ($row['type'] == 'file') {
if (module_exists('upload')) {
$data[$dbview_name][$column]['field']['handler'] = 'webform_mysql_views_handler_field_file_fid';
$data[$dbview_name][$column]['sort']['handler'] = 'views_handler_sort_numeric';
$data[$dbview_name][$column]['filter']['handler'] = 'views_handler_filter_group_by_numeric';
$data[$dbview_name][$column]['filter'] = array(
'handler' => 'webform_mysql_views_handler_filter_file_fid',
'title' => t('Has attached files'),
'type' => 'yes-no',
'help' => t('Only display items with attached files. This can cause duplicates if there are multiple attached files.'),
);
$data[$dbview_name][$column]['relationship'] = array(
'title' => t('File Component @field', array(
'@field' => $row['name'],
)),
'help' => t('Add a relationship to gain access to more file data for files uploaded through the File component. Note that this relationship will cause duplicate results if there are multiple files attached to the webform submission.'),
'base' => 'files',
'base field' => 'fid',
'handler' => 'views_handler_relationship',
'label' => t('@title: File Component', array(
'@title' => $node->title,
)),
);
}
else {
$data[$dbview_name][$column]['field']['handler'] = 'views_handler_field_numeric';
$data[$dbview_name][$column]['field']['click sortable'] = TRUE;
$data[$dbview_name][$column]['sort']['handler'] = 'views_handler_sort_numeric';
$data[$dbview_name][$column]['filter']['handler'] = 'views_handler_filter_group_by_numeric';
$data[$dbview_name][$column]['argument']['handler'] = 'views_handler_argument_numeric';
}
}
else {
if (module_exists('date_api') && $row['type'] == 'date') {
$data[$dbview_name][$column]['field']['handler'] = 'views_handler_field_date';
$data[$dbview_name][$column]['field']['click sortable'] = TRUE;
$data[$dbview_name][$column]['sort']['handler'] = 'views_handler_sort_date';
$data[$dbview_name][$column]['filter']['handler'] = 'views_handler_filter_date';
$data[$dbview_name][$column]['argument']['handler'] = 'views_handler_sort_date';
}
else {
if ($row['type'] == 'node') {
$data[$dbview_name][$column]['field']['handler'] = 'webform_mysql_views_handler_field_node';
$data[$dbview_name][$column]['field']['click sortable'] = TRUE;
$data[$dbview_name][$column]['sort']['handler'] = 'views_handler_sort';
$data[$dbview_name][$column]['filter']['handler'] = 'views_handler_filter_numeric';
$data[$dbview_name][$column]['argument']['handler'] = 'views_handler_argument_node_nid';
$data[$dbview_name][$column]['relationship'] = array(
'title' => t('Node Component @field', array(
'@field' => $row['name'],
)),
'help' => t('Add a relationship to gain access to more file data for files uploaded through the File component. Note that this relationship will cause duplicate results if there are multiple files attached to the webform submission.'),
'base' => 'node',
'base field' => 'nid',
'handler' => 'views_handler_relationship',
'label' => t('@title: Node Component', array(
'@title' => $node->title,
)),
);
}
else {
$data[$dbview_name][$column]['field']['handler'] = 'views_handler_field';
$data[$dbview_name][$column]['field']['click sortable'] = TRUE;
$data[$dbview_name][$column]['sort']['handler'] = 'views_handler_sort';
$data[$dbview_name][$column]['filter']['handler'] = 'views_handler_filter_string';
$data[$dbview_name][$column]['argument']['handler'] = 'views_handler_argument_string';
}
}
}
}
}
}
$data[$dbview_name]['submitted'] = array(
'title' => t('submitted'),
'help' => t('The date and time the webform was submitted.'),
'field' => array(
'handler' => 'views_handler_field_date',
'click sortable' => TRUE,
),
'sort' => array(
'handler' => 'views_handler_sort_date',
),
'filter' => array(
'handler' => 'views_handler_filter_date',
),
'argument' => array(
'handler' => 'views_handler_argument_date',
),
);
}
}
}
function webform_mysql_views_views_handlers() {
return array(
'info' => array(
'path' => drupal_get_path('module', 'webform_mysql_views') . '/views/handlers',
),
'handlers' => array(
'webform_mysql_views_handler_field_select' => array(
'parent' => 'views_handler_field',
),
'webform_mysql_views_handler_select_filter' => array(
'parent' => 'views_handler_filter_in_operator',
),
'webform_mysql_views_handler_field_file_fid' => array(
'parent' => 'views_handler_field_prerender_list',
),
'webform_mysql_views_handler_filter_file_fid' => array(
'parent' => 'views_handler_filter_boolean_operator',
),
'webform_mysql_views_handler_field_date' => array(
'parent' => 'views_handler_field_date',
),
'webform_mysql_views_handler_field_node' => array(
'parent' => 'views_handler_field',
),
),
);
}