Fatal error: Call to undefined method FeedsMissingPlugin::entityType() in /var/www/mysite/sites/all/modules/feeds/feeds.rules.inc on line 17

I had feeds installed and working, but all of the sudden I'm getting this error and the only way to get the site back is to disable all feeds modules and clear the bootstrap cache

Support from Acquia helps fund testing for Drupal Acquia logo

Comments

emackn’s picture

you should try the dev version.

SocialNicheGuru’s picture

Version: 7.x-2.0-alpha4 » 7.x-2.x-dev

It's still an issue

SocialNicheGuru’s picture

the only reference to the FeedsMissingPlugin class is

feeds/plugins/FeedsPlugin.inc

/**
* Used when a plugin is missing.
*/
class FeedsMissingPlugin extends FeedsPlugin {
public function menuItem() {
return array();
}
}

SocialNicheGuru’s picture

(deleted comment)
Edit:

This is caused by another module feeds_rules :(

Edit:

No, it's caused by the feeds_import submodule

elliotttf’s picture

I recently experienced this when adding a new processor to a feature. The issue is avoided after all of the caches are cleared, but unfortunately I couldn't clear the cache without a tweak to the feeds.rules.inc file to make sure that the method exists. Patch attached.

elliotttf’s picture

Status: Active » Needs review
MegaChriz’s picture

I had this issue as well when I wanted to reinstall a module that defined a processor. The patch in #5 works for me.

SocialNicheGuru’s picture

patch also works for me

franz’s picture

Status: Needs review » Needs work

The solution looks fine, but not very explicit. Maybe instead of checking the method, we could check if the $importer is of class FeedsMissingPlugin. Either way, a nice comment explaining the reasons would be great too.

MegaChriz’s picture

@franz
Something like this? Or do you have a better suggestion for the comment?

MegaChriz’s picture

Status: Needs work » Needs review

(Setting status.)

twistor’s picture

I would rather be explicit in what we ARE looking for.

    $processor = $importer->processor;

    // It's possible to get FeedsMissingPlugin here which will break things
    // since it doesn't implement FeedsProcessor::entityType().
    if (!$processor instanceof FeedsProcessor) {
      continue;
    }

This still makes me feel icky.

franz’s picture

Yes, I'm thinking things over, why don't we clear the specific cache involved (class registry?) before calling feeds_importer_load_all()? Wouldn't that be a more "elegant" resolution?

Leaving this as needs review to get more opinions.

twistor’s picture

The FeedsMissingPlugin issue can usually be resolved by the module adding the plugin files to its info file.

I was thinking about this:

function feeds_plugin($plugin, $id) {
  ctools_include('plugins');
  if ($class = ctools_plugin_load_class('feeds', 'plugins', $plugin, 'handler')) {
    return FeedsConfigurable::instance($class, $id);
  }

  // We didn't find our plugin class. Clear the cache and try again.
  cache_clear_all('plugins:feeds:plugins', 'cache');
  if ($class = ctools_plugin_load_class('feeds', 'plugins', $plugin, 'handler')) {
    return FeedsConfigurable::instance($class, $id);
  }

  // So sad, we didn't find it.
  $args = array('%plugin' => $plugin, '@id' => $id);
  if (user_access('administer feeds')) {
    $args['@link'] = url('admin/structure/feeds/' . $id);
    drupal_set_message(t('Missing Feeds plugin %plugin. See <a href="@link">@id</a>. Check whether all required libraries and modules are installed properly.', $args), 'warning');
  }
  else {
    drupal_set_message(t('Missing Feeds plugin %plugin. Please contact your site administrator.', $args), 'warning');
  }
  $class = ctools_plugin_load_class('feeds', 'plugins', 'FeedsMissingPlugin', 'handler');
  return FeedsConfigurable::instance($class, $id);
}

But I can't replicate the old issue of requiring a cache clear after enabling the module.
What version of ctools are you guys using?

If it turns out that it's still an issue, the above could help greatly.

**
Either way, we still need to check. It's not just a cache issue. If you disable a module that provides a Feeds plugin that's in use in an importer, it will still show up as FeedsMissingPlugin().

What we really need are sanity checks per plugin that we can call. Then, feeds_importer_load_all() and other various activities will only load importers/sources that are fully ready to go. I've been thinking about this for a while.

PatchRanger’s picture

I was also getting the same error - and the patch from #10 did the work.
I commit new feature that uses FeedsCommerceProductProcessor but Commerce module (and Commerce Features) was not installed yet. That is why I got the error from subj. I applied the patch, cleared the cache (just reloading the page did not help) - and after that my site resurrected with this message : "Missing Feeds plugin FeedsCommerceProductProcessor. Please contact your site administrator.".

twistor’s picture

Status: Needs review » Fixed

I went ahead and committed #12. I've been bumping into this issue lately, and there's no really elegant way to handle it.

#13, Ideally we could do something with the cache if a plugin is missing, but that's a separate issue and doesn't solve the problem if the plugin really doesn't exist.

7.x http://drupalcode.org/project/feeds.git/commit/dc73fee

Status: Fixed » Closed (fixed)

Automatically closed -- issue fixed for 2 weeks with no activity.

digibrill’s picture

If this error is present, should one just install this patch or the dev version of Sep 27? Aren't both of those options temporary fixes? When will there be another recommended release?