function ContextHandler::filterPluginDefinitionsByContexts

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Plugin/Context/ContextHandler.php \Drupal\Core\Plugin\Context\ContextHandler::filterPluginDefinitionsByContexts()
  2. 10 core/lib/Drupal/Core/Plugin/Context/ContextHandler.php \Drupal\Core\Plugin\Context\ContextHandler::filterPluginDefinitionsByContexts()
  3. 11.x core/lib/Drupal/Core/Plugin/Context/ContextHandler.php \Drupal\Core\Plugin\Context\ContextHandler::filterPluginDefinitionsByContexts()

Overrides ContextHandlerInterface::filterPluginDefinitionsByContexts

File

core/lib/Drupal/Core/Plugin/Context/ContextHandler.php, line 20

Class

ContextHandler
Provides methods to handle sets of contexts.

Namespace

Drupal\Core\Plugin\Context

Code

public function filterPluginDefinitionsByContexts(array $contexts, array $definitions) {
    $checked_requirements = [];
    return array_filter($definitions, function ($plugin_definition) use ($contexts, &$checked_requirements) {
        $context_definitions = $this->getContextDefinitions($plugin_definition);
        if ($context_definitions) {
            // Generate a unique key for the current context definitions. This will
            // allow calling checkRequirements() once for all plugins that have the
            // same context definitions.
            $context_definitions_key = hash('sha256', serialize($context_definitions));
            if (!isset($checked_requirements[$context_definitions_key])) {
                // Check the set of contexts against the requirements.
                $checked_requirements[$context_definitions_key] = $this->checkRequirements($contexts, $context_definitions);
            }
            return $checked_requirements[$context_definitions_key];
        }
        // If this plugin doesn't need any context, it is available to use.
        return TRUE;
    });
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.