For some security reason I have upgraded the views module (using Views 6.x-2.16) and it display this message after the upgrade:

Error Description:
Fatal error: Call to a member function init() on a non-object in /www/sites/all/modules/views_hacks/views_filters_selective/views_filters_selective.module on line 262

I have try the last dev release but steel the same problem.

Thanks

Comments

ChrisValentine’s picture

I get this too but only on views created since the update of Views - older views don't generate the error.

soulfroys’s picture

Same here...

jvieille’s picture

Priority: Major » Critical

Same problem.
It lies here:

function _views_filter_selective_query($filter, $field_name, $table_name, $oids) {
  // Create new Views query object to make the SQL statement for us.
  $views_data = views_fetch_data($filter->view->base_table);
  $query_options = $filter->view->display_handler->get_option('query');
  $plugin = !empty($views_data['table']['base']['query class']) ? $views_data['table']['base']['query class'] : 'views_query';
  $query = views_get_plugin('query', $plugin);
  $query->init($filter->view->base_table, $filter->view->base_field, $query_options['options']);
  $query->add_field($table_name, $field_name, $field_name);
  $placeholders = db_placeholders($oids, 'int');
  $query->add_where(0, "{$filter->view->base_table}.{$filter->view->base_field} IN ($placeholders)", $oids);
  $query->view = (object)array('name' => 'selective_query', 'selective_query' => TRUE); // needed to avoid PHP notice and for views_query_alter
  $query->alter($query->view);

1) $query_options is empty - get_option does not get anything
2) views_get_plugin('query', $plugin) gets nothing.from the plugin 'views_query'

consequently, $query->init... fails as $query does not exist.
I notice that $this is empty too, though get_option needs it.

Is this module definetly broken since views 2.16, or are we unlucky?

soulfroys’s picture

Hi soulfroys,

Do you still have this problem?
http://drupal.org/node/1630214

If no, how did you solved it?

Hello @jvieille

Unfortunately I couldn't fix the bug, I just disabled the module and removed the fields... :-(

Better luck for us!

infojunkie’s picture

Issue summary: View changes
Status: Active » Closed (won't fix)

This module is no longer maintained for D6 and has been deprecated in favour of https://drupal.org/project/views_selective_filters for D7. Please test there and reopen if necessary.

jvieille’s picture

Here is the fix

function _views_filter_selective_query($filter, $field_name, $table_name, $oids) {
  // Create new Views query object to make the SQL statement for us.
-  $views_data = views_fetch_data($filter->view->base_table);
-  $query_options = $filter->view->display_handler->get_option('query');
-  $plugin = !empty($views_data['table']['base']['query class']) ? $views_data['table']['base']['query class'] : 'views_query';
-  $query = views_get_plugin('query', $plugin);
-  $query->init($filter->view->base_table, $filter->view->base_field, $query_options['options']);
+  $views_data = views_fetch_data($filter->view->base_table);
+   views_include('query');
+   $query = new views_query($filter->view->base_table, $filter->view->base_field);
+  if (!empty($views_data['table']['base']['database'])) {
+    $query->base_database = $views_data['table']['base']['database'];
+  }
  $query->add_field($table_name, $field_name, $field_name);
  $placeholders = db_placeholders($oids, 'int');
  $query->add_where(0, "{$filter->view->base_table}.{$filter->view->base_field} IN ($placeholders)", $oids);
  $query->view = (object)array('name' => 'selective_query', 'selective_query' => TRUE); // needed to avoid PHP notice and for views_query_alter
-  $query->alter($query->view);
  // Return the results.
  $options = array();
  $result = db_query($query->query(), $oids);
  while ($id = db_fetch_object($result)) {
    $options[] = $id->{$field_name};
  }
  return $options;
}