diff --git a/views/views_bulk_operations.views.inc b/views/views_bulk_operations.views.inc index 1c7078a..a740ab3 100644 --- a/views/views_bulk_operations.views.inc +++ b/views/views_bulk_operations.views.inc @@ -6,11 +6,11 @@ function views_bulk_operations_views_data_alter(&$data) { foreach (entity_get_info() as $entity_type => $info) { if (isset($info['base table']) && isset($data[$info['base table']]['table'])) { - $data[$info['base table']]['views_bulk_operations'] = array( + $data[$info['base table']]['views_bulk_operations']['moved to'] = array('views_entity_' . $entity_type, 'views_bulk_operations'); + $data['views_entity_' . $entity_type]['views_bulk_operations'] = array( 'title' => $data[$info['base table']]['table']['group'], 'group' => t('Bulk operations'), 'help' => t('Provide a checkbox to select the row for bulk operations.'), - 'real field' => $info['entity keys']['id'], 'field' => array( 'handler' => 'views_bulk_operations_handler_field_operations', 'click sortable' => FALSE, diff --git a/views/views_bulk_operations_handler_field_operations.inc b/views/views_bulk_operations_handler_field_operations.inc index 43a61b8..dfb3edf 100644 --- a/views/views_bulk_operations_handler_field_operations.inc +++ b/views/views_bulk_operations_handler_field_operations.inc @@ -6,7 +6,7 @@ * Implements the Views Form API. */ -class views_bulk_operations_handler_field_operations extends views_handler_field { +class views_bulk_operations_handler_field_operations extends views_handler_field_entity { var $revision = FALSE; function init(&$view, &$options) { @@ -218,7 +218,11 @@ class views_bulk_operations_handler_field_operations extends views_handler_field // At this point, the query has already been run, so we can access the results // in order to get the base key value (for example, nid for nodes). foreach ($this->view->result as $row_index => $row) { - $entity_id = $this->get_value($row); + // Get the entity for the row. + $this->view->row_index = $row_index; + $entity = $row->entity; + // Get the entity ID. + list($entity_id, $entity_vid, $bundle) = entity_extract_ids($this->get_entity_type(), $entity); if ($this->options['vbo_settings']['force_single']) { $form[$this->options['id']][$row_index] = array( @@ -274,6 +278,7 @@ class views_bulk_operations_handler_field_operations extends views_handler_field */ public function get_entity_type() { $base_table = $this->view->base_table; + $table_data = views_fetch_data($this->table); // If the current field is under a relationship you can't be sure that the // base table of the view is the base table of the current field. @@ -281,8 +286,14 @@ class views_bulk_operations_handler_field_operations extends views_handler_field if (!empty($this->options['relationship']) && $this->options['relationship'] != 'none') { $relationships = $this->view->display_handler->get_option('relationships'); $options = $relationships[$this->options['relationship']]; - $data = views_fetch_data($options['table']); - $base_table = $data[$options['field']]['relationship']['base']; + $table_data = views_fetch_data($options['table']); + $base_table = $table_data[$options['field']]['relationship']['base']; + $table_data = views_fetch_data($base_table); + } + + // The entity type is available in the views definition. + if (isset($table_data['table']['entity type'])) { + return $table_data['table']['entity type']; } // The base table is now known, use it to determine the entity type. foreach (entity_get_info() as $entity_type => $info) {