function views_discover_plugins

Same name in other branches
  1. 6.x-3.x 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

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;
}