function slickgrid_preprocess_views_view_slickgrid in Slickgrid 7.2
Same name and namespace in other branches
- 6 slickgrid.module \slickgrid_preprocess_views_view_slickgrid()
- 7 theme/theme.inc \slickgrid_preprocess_views_view_slickgrid()
File
- theme/theme.inc, line 3
Code
function slickgrid_preprocess_views_view_slickgrid(&$variables) {
global $user;
$class = array(
'views-view-grid',
);
$path = drupal_get_path('module', 'slickgrid');
$view =& $variables['view'];
foreach ($view->display as $id => $display) {
if ($display->display_plugin == 'views_data_export' && isset($display->display_options['displays']) && in_array($view->current_display, $display->display_options['displays'])) {
$view->style_plugin->options['export'] = true;
}
}
if (is_array($user_settings = slickgrid_get_settings(array(
'uid' => $user->uid,
'view_name' => $view->name,
'display_id' => $view->current_display,
)))) {
$view->style_plugin->options = array_merge($view->style_plugin->options, $user_settings);
}
if (!isset($view->style_plugin->options['entity_type'])) {
foreach ($entities_info = entity_get_info() as $entity_type => $entity_info) {
if ($entity_info['base table'] == $view->base_table) {
$view->style_plugin->options['entity_type'] = $entity_type;
break;
}
}
}
$handlers = $view->style_plugin->display->handler
->get_handlers('field');
$ordered_columns = array();
$unordered_columns = array();
$added_plugins = array();
$tabs = array();
foreach ($handlers as $field_id => $field_handler) {
if ($field_handler->options['exclude']) {
continue;
}
if (isset($view->style_plugin->options['column_width'][$field_id])) {
$column_width = $view->style_plugin->options['column_width'][$field_id];
}
elseif (isset($view->style_plugin->options['columns'][$field_id]['width'])) {
$column_width = $view->style_plugin->options['columns'][$field_id]['width'];
}
else {
$column_width = 100;
}
$column = array(
'id' => $field_id,
'name' => $field_handler->options['label'],
'field' => $field_id,
'width' => $column_width,
'cssClass' => 'cell-title',
'resizable' => $view->style_plugin->options['enableColumnResize'] ? 1 : 0,
);
if (isset($view->style_plugin->options['columns'][$field_id]['toolTip'])) {
$column['toolTip'] = $view->style_plugin->options['columns'][$field_id]['toolTip'];
}
if (isset($view->style_plugin->options['columns'][$field_id]['headerCssClass'])) {
$column['headerCssClass'] = $view->style_plugin->options['columns'][$field_id]['headerCssClass'];
}
if (isset($view->style_plugin->options['columns'][$field_id]['data'])) {
$column['data'] = $view->style_plugin->options['columns'][$field_id]['data'];
}
if (isset($field_handler->definition['field_name'])) {
$column['fieldName'] = $field_handler->definition['field_name'];
}
else {
$column['fieldName'] = $field_handler->real_field;
}
foreach (array_keys(slickgrid_get_plugin_types()) as $plugin_type) {
if (isset($view->style_plugin->options['columns'][$field_id][$plugin_type]) & !empty($view->style_plugin->options['columns'][$field_id][$plugin_type])) {
$plugin = ctools_get_plugins('slickgrid', $plugin_type, $view->style_plugin->options['columns'][$field_id][$plugin_type]);
if (isset($plugin['js']['class'])) {
$column[$plugin_type] = $plugin['js']['class'];
}
else {
$column[$plugin_type] = $view->style_plugin->options['columns'][$field_id][$plugin_type];
}
if (!in_array($view->style_plugin->options['columns'][$field_id][$plugin_type], $added_plugins)) {
foreach (array(
'js',
'css',
) as $file_type) {
if (isset($plugin[$file_type]) && $plugin[$file_type]['file']) {
$func = 'drupal_add_' . $file_type;
if (isset($plugin[$file_type]['file_path'])) {
$func($plugin[$file_type]['file_path'] . '/' . $plugin[$file_type]['file']);
}
else {
$func($plugin['path'] . '/' . $plugin[$file_type]['file']);
}
}
}
$added_plugins[] = $view->style_plugin->options['columns'][$field_id][$plugin_type];
}
switch ($plugin_type) {
case 'editor':
$view->style_plugin->options['editable'] = TRUE;
$view->style_plugin->options['enableCellNavigation'] = TRUE;
break;
case 'filter':
$view->style_plugin->options['filterable'] = TRUE;
if ($view->style_plugin->options['columns'][$field_id][$plugin_type] != 'collapsibleFilter') {
if (isset($_GET[$field_id]) && !isset($view->style_plugin->options['default_filter'])) {
$view->style_plugin->options['default_filter'] = array(
'field' => $field_id,
'value' => $_GET[$field_id],
);
if (!empty($view->style_plugin->options['columns'][$field_id]['tab'])) {
$view->style_plugin->options['default_active_tab'] = $view->style_plugin->options['columns'][$field_id]['tab'];
}
}
}
break;
}
}
}
if (property_exists($handlers[$field_id], 'field_info') && !in_array($handlers[$field_id]->field_info['type'], array(
'text_with_summary',
'file',
))) {
$view->style_plugin->options['sortable_columns'] = TRUE;
$column['sortable'] = 1;
}
$view->style_plugin->options['columns'][$field_id]['label'] = $field_handler->options['label'];
if (isset($view->style_plugin->options['ordered_columns']) && is_numeric($ordered_column_position = array_search($field_id, $view->style_plugin->options['ordered_columns']))) {
if (!empty($view->style_plugin->options['columns'][$field_id]['tab'])) {
$column['tab'] = $view->style_plugin->options['columns'][$field_id]['tab'];
$tabs[$view->style_plugin->options['columns'][$field_id]['tab']]['ordered_columns'][$ordered_column_position] = $column;
}
else {
$ordered_columns[$ordered_column_position] = $column;
}
}
else {
if (!empty($view->style_plugin->options['columns'][$field_id]['tab'])) {
$column['tab'] = $view->style_plugin->options['columns'][$field_id]['tab'];
$tabs[$view->style_plugin->options['columns'][$field_id]['tab']]['unordered_columns'][] = $column;
}
else {
$unordered_columns[] = $column;
}
}
}
ksort($ordered_columns);
$view->columns = array_merge($ordered_columns, $unordered_columns);
if (count($tabs)) {
$tab_offset = 0;
$view->style_plugin->options['tabs'] = TRUE;
drupal_add_css($path . '/css/slickgrid.controls.css');
drupal_add_js($path . '/js/controls/slickgrid.tabs.js');
foreach ($tabs as $tab_name => $tab) {
if (isset($tab['ordered_columns'])) {
ksort($tab['ordered_columns']);
}
else {
$tab['ordered_columns'] = array();
}
if (!isset($tab['unordered_columns'])) {
$tab['unordered_columns'] = array();
}
$view->columns = array_merge($view->columns, $tab['ordered_columns'], $tab['unordered_columns']);
}
$variables['tabs'] = theme('slickgrid_tabs', array(
'options' => $view->style_plugin->options,
'columns' => $view->columns,
'view' => $view,
));
$class[] = 'grid-with-tabs';
}
$parents = array();
$view->data = array();
if (is_array($variables['rows'])) {
$ids = array();
foreach ($variables['rows'] as $count => $row) {
$view->row_index = $count;
$item = array();
if (!isset($row->{$view->base_field})) {
watchdog('slickgrid', t('@base_field is missing.'), array(
'@base_field' => $view->base_field,
), WATCHDOG_ERROR);
continue;
}
if (in_array($row->{$view->base_field}, $ids)) {
drupal_set_message(t('There are duplicate @base_fields in this grid - each row must be unique.', array(
'@base_field' => $view->base_field,
)), 'error');
watchdog('slickgrid', t('Duplicate @base_fields - @id is not unique.'), array(
'@base_field' => $view->base_field,
'@id' => $row->{$view->base_field},
), WATCHDOG_ERROR);
break;
}
else {
foreach ($view->columns as $column) {
if (!$view->field[$column['id']]->options['exclude']) {
$item[$column['id']] = $view
->render_field($column['id'], $count);
if (is_null($item[$column['id']])) {
$item[$column['id']] = '';
}
}
}
$item['id'] = $row->{$view->base_field};
$ids[] = $row->{$view->base_field};
if (isset($view->field['slickgrid_tid']) && property_exists($row, $view->field['slickgrid_tid']->field_alias) && ($slickgrid_tid = $row->{$view->field['slickgrid_tid']->field_alias})) {
if ($parent =& $parents[$row->{$view->field['slickgrid_parent_tid']->field_alias}]) {
$item['indent'] = $parent['indent'] + 1;
$item['parent'] = $parent['nid'];
$key = ++$parent['key'];
}
else {
$item['indent'] = 0;
$item['parent'] = 0;
$key = $count;
}
$parents[$slickgrid_tid] = array(
'nid' => $row->nid,
'indent' => $view->data[$count]['indent'],
'key' => $key,
);
}
else {
$key = $count;
}
if (array_key_exists($key, $view->data)) {
array_splice($view->data, $key, 0, $key);
$view->data[$key] = $item;
}
else {
$view->data[$key] = $item;
}
}
}
}
if ($errors = drupal_get_messages('error', false)) {
$variables['slickgrid'] = theme('status_messages', array(
'display' => 'error',
));
}
else {
$variables['slickgrid'] = theme('slickgrid', array(
'view' => $view,
));
$variables['controls'] = theme('slickgrid_controls', array(
'view' => $view,
));
}
$class[] = 'cols-' . count($view->columns);
$variables['class'] = implode(' ', $class);
}