protected function context_condition_path::match

cis7 context_condition_path.inc protected context_condition_path::match($subject, $patterns, $path = FALSE)
cle7 context_condition_path.inc protected context_condition_path::match($subject, $patterns, $path = FALSE)
elmsmedia7 context_condition_path.inc protected context_condition_path::match($subject, $patterns, $path = FALSE)
icor7 context_condition_path.inc protected context_condition_path::match($subject, $patterns, $path = FALSE)
meedjum_blog7 context_condition_path.inc protected context_condition_path::match($subject, $patterns, $path = FALSE)
mooc7 context_condition_path.inc protected context_condition_path::match($subject, $patterns, $path = FALSE)

Match the subject against a set of regex patterns. Similar to drupal_match_path() but also handles negation through the use of the ~ character.

Parameters

mixed $subject: The subject string or an array of strings to be matched.

array $patterns: An array of patterns. Any patterns that begin with ~ are considered negative or excluded conditions.

boolean $path: Whether the given subject should be matched as a Drupal path. If TRUE, '<front>' will be replaced with the site frontpage when matching against $patterns.

3 calls to context_condition_path::match()
context_condition_context::execute in sites/all/modules/ulmus/context/plugins/context_condition_context.inc
Execute.
context_condition_path::execute in sites/all/modules/ulmus/context/plugins/context_condition_path.inc
Execute.
context_condition_query_string::execute in sites/all/modules/ulmus/context/plugins/context_condition_query_string.inc
Execute.

File

sites/all/modules/ulmus/context/plugins/context_condition_path.inc, line 77

Class

context_condition_path
Expose paths as a context condition.

Code

protected function match($subject, $patterns, $path = FALSE) {
  static $regexps;
  $match = FALSE;
  $positives = $negatives = 0;
  $subject = !is_array($subject) ? array($subject) : $subject;
  foreach ($patterns as $pattern) {
    if (strpos($pattern, '~') === 0) {
      $negate = TRUE;
      $negatives++;
    }
    else {
      $negate = FALSE;
      $positives++;
    }
    $pattern = ltrim($pattern, '~');
    if (!isset($regexps[$pattern])) {
      if ($path) {
        $regexps[$pattern] = '/^(' . preg_replace(array('/(\r\n?|\n)/', '/\\\\\*/', '/(^|\|)\\\\<front\\\\>($|\|)/'), array('|', '.*', '\1' . preg_quote(variable_get('site_frontpage', 'node'), '/') . '\2'), preg_quote($pattern, '/')) . ')$/';
      }
      else {
        $regexps[$pattern] = '/^(' . preg_replace(array('/(\r\n?|\n)/', '/\\\\\*/'), array('|', '.*'), preg_quote($pattern, '/')) . ')$/';
      }
    }
    foreach ($subject as $value) {
      if (preg_match($regexps[$pattern], $value)) {
        if ($negate) {
          return FALSE;
        }
        $match = TRUE;
      }
    }
  }
  // If there are **only** negative conditions and we've gotten this far none
  // we actually have a match.
  if ($positives === 0 && $negatives) {
    return TRUE;
  }
  return $match;
}