You are here

function context_condition_context_all::execute in Context 7.3

Execute.

Overrides context_condition_path::execute

File

plugins/context_condition_context_all.inc, line 7

Class

context_condition_context_all
Expose active contexts as a context condition.

Code

function execute() {
  if ($this
    ->condition_used()) {
    $active_contexts = array_keys(context_active_contexts());
    foreach ($this
      ->get_contexts() as $context) {

      // Only test contexts that haven't been activated yet,
      // and have values set.
      if (!in_array($context->name, $active_contexts, TRUE) && ($values = $this
        ->fetch_from_context($context, 'values'))) {
        $contexts_matched = 0;

        // Count the matched contexts
        foreach ($values as $value) {

          // Always check against the active contexts.
          if ($this
            ->match(array_keys(context_active_contexts()), array(
            $value,
          ))) {
            $contexts_matched++;
          }
        }

        // The condition is met if all contexts are active.
        if ($contexts_matched == count($values)) {
          $this
            ->condition_met($context);
        }
      }
    }

    // If the list of active contexts has changed, we need to recurse.
    if ($active_contexts != array_keys(context_active_contexts())) {
      $this
        ->execute();
    }
  }
}