function ctools_context_required::filter
Filter the contexts to determine which apply in the current environment.
A context passes the filter if:
- the context matches 'type' of the required keywords (uses ctools_context::is_type(), so includes 'any' matches, etc).
- AND if restrictions are present, there are some common elements between the requirement and the context.
Parameters
array $contexts: An array of ctools_context objects (or something which will cast to an array of them). The contexts to apply the filter on.
Return value
array An array of context objects, keyed with the same keys used for $contexts, which pass the filter.
See also
2 calls to ctools_context_required::filter()
- ctools_context_optional::filter in includes/
context.inc - Filter the contexts to determine which apply in the current environment.
- ctools_context_required::select in includes/
context.inc - Select one context from the list of contexts, accounting for changed IDs.
1 method overrides ctools_context_required::filter()
- ctools_context_optional::filter in includes/
context.inc - Filter the contexts to determine which apply in the current environment.
File
-
includes/
context.inc, line 305
Class
- ctools_context_required
- Used to create a method of comparing if a list of contexts match a required context type.
Code
public function filter($contexts) {
$result = array();
/**
* See which of these contexts are valid.
* @var ctools_context $context
*/
foreach ((array) $contexts as $cid => $context) {
if ($context->is_type($this->keywords)) {
// Compare to see if our contexts were met.
if (!empty($this->restrictions) && !empty($context->restrictions)) {
foreach ($this->restrictions as $key => $values) {
// If we have a restriction, the context must either not have that
// restriction listed, which means we simply don't know what it is,
// or there must be an intersection of the restricted values on
// both sides.
if (!is_array($values)) {
$values = array(
$values,
);
}
if (!empty($context->restrictions[$key]) && !array_intersect($values, $context->restrictions[$key])) {
// Break out to check next context; this one fails the filter.
continue 2;
}
}
}
// This context passes the filter.
$result[$cid] = $context;
}
}
return $result;
}