protected function context_condition_path::match in Context 6.3
Same name and namespace in other branches
- 6 plugins/context_condition_path.inc \context_condition_path::match()
- 7.3 plugins/context_condition_path.inc \context_condition_path::match()
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.
2 calls to context_condition_path::match()
- context_condition_context::execute in plugins/
context_condition_context.inc - Execute.
- context_condition_path::execute in plugins/
context_condition_path.inc - Execute.
File
- 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;
}