You are here

function views_discover_plugins in Views (for Drupal 7) 7.3

Same name and namespace in other branches
  1. 6.3 includes/plugins.inc \views_discover_plugins()
  2. 6.2 includes/plugins.inc \views_discover_plugins()

Builds and return a list of all plugins available in the system.

Return value

Nested array of plugins, grouped by type.

1 call to views_discover_plugins()
_views_fetch_plugin_data in includes/cache.inc
Fetch the plugin data from cache.

File

includes/plugins.inc, line 412
Built in plugins for Views output handling.

Code

function views_discover_plugins() {
  $cache = array(
    'display' => array(),
    'style' => array(),
    'row' => array(),
    'argument default' => array(),
    'argument validator' => array(),
    'access' => array(),
    'cache' => array(),
    'exposed_form' => array(),
  );

  // Get plugins from all modules.
  foreach (module_implements('views_plugins') as $module) {
    $function = $module . '_views_plugins';
    $result = $function();
    if (!is_array($result)) {
      continue;
    }
    $module_dir = isset($result['module']) ? $result['module'] : $module;

    // Setup automatic path/file finding for theme registration.
    if ($module_dir == 'views') {
      $theme_path = drupal_get_path('module', $module_dir) . '/theme';
      $theme_file = 'theme.inc';
      $path = drupal_get_path('module', $module_dir) . '/plugins';
    }
    else {
      $theme_path = $path = drupal_get_path('module', $module_dir);
      $theme_file = "{$module}.views.inc";
    }
    foreach ($result as $type => $info) {
      if ($type == 'module') {
        continue;
      }
      foreach ($info as $plugin => $def) {
        $def['module'] = $module_dir;
        if (!isset($def['theme path'])) {
          $def['theme path'] = $theme_path;
        }
        if (!isset($def['theme file'])) {
          $def['theme file'] = $theme_file;
        }
        if (!isset($def['path'])) {
          $def['path'] = $path;
        }
        if (!isset($def['file'])) {
          $def['file'] = $def['handler'] . '.inc';
        }
        if (!isset($def['parent'])) {
          $def['parent'] = 'parent';
        }

        // Set the internal name to be able to read it out later.
        $def['name'] = $plugin;

        // merge the new data in.
        $cache[$type][$plugin] = $def;
      }
    }
  }

  // Let other modules modify the plugins.
  drupal_alter('views_plugins', $cache);
  return $cache;
}