summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGábor Hojtsy <gabor@hojtsy.hu>2007-10-16 14:10:33 +0000
committerGábor Hojtsy <gabor@hojtsy.hu>2007-10-16 14:10:33 +0000
commit8a9ba77275935bf0e5ab90ed4370f9416d787a08 (patch)
tree9b5576b9b8478b331e4b322b3373e36b860a49cc
parent8a10f3ea220b4ad8e1d8244594031d918fb22b04 (diff)
downloadbrdo-8a9ba77275935bf0e5ab90ed4370f9416d787a08.tar.gz
brdo-8a9ba77275935bf0e5ab90ed4370f9416d787a08.tar.bz2
#183690 by Wim Leers: (developer improvement) abstract path matching to drupal_match_path() from block listing, so this gets reusable when path based matching is required
-rw-r--r--includes/path.inc20
-rw-r--r--modules/block/block.module5
2 files changed, 22 insertions, 3 deletions
diff --git a/includes/path.inc b/includes/path.inc
index 898b39048..d9774f93e 100644
--- a/includes/path.inc
+++ b/includes/path.inc
@@ -220,3 +220,23 @@ function drupal_is_front_page() {
// we can check it against the 'site_frontpage' variable.
return $_GET['q'] == drupal_get_normal_path(variable_get('site_frontpage', 'node'));
}
+
+/**
+ * Check if a path matches any pattern in a set of patterns.
+ *
+ * @param $path
+ * The path to match.
+ * @param $patterns
+ * String containing a set of patterns separated by \n, \r or \r\n.
+ *
+ * @return
+ * Boolean value: TRUE if the path matches a pattern, FALSE otherwise.
+ */
+function drupal_match_path($path, $patterns) {
+ static $regexps;
+
+ if (!isset($regexps[$patterns])) {
+ $regexps[$patterns] = '/^('. preg_replace(array('/(\r\n?|\n)/', '/\\\\\*/', '/(^|\|)\\\\<front\\\\>($|\|)/'), array('|', '.*', '\1'. preg_quote(variable_get('site_frontpage', 'node'), '/') .'\2'), preg_quote($patterns, '/')) .')$/';
+ }
+ return preg_match($regexps[$patterns], $path);
+}
diff --git a/modules/block/block.module b/modules/block/block.module
index 5c8f354ce..1b4557b93 100644
--- a/modules/block/block.module
+++ b/modules/block/block.module
@@ -410,11 +410,10 @@ function block_list($region) {
if ($block->pages) {
if ($block->visibility < 2) {
$path = drupal_get_path_alias($_GET['q']);
- $regexp = '/^('. preg_replace(array('/(\r\n?|\n)/', '/\\\\\*/', '/(^|\|)\\\\<front\\\\>($|\|)/'), array('|', '.*', '\1'. preg_quote(variable_get('site_frontpage', 'node'), '/') .'\2'), preg_quote($block->pages, '/')) .')$/';
// Compare with the internal and path alias (if any).
- $page_match = preg_match($regexp, $path);
+ $page_match = drupal_match_path($path, $block->pages);
if ($path != $_GET['q']) {
- $page_match = $page_match || preg_match($regexp, $_GET['q']);
+ $page_match = $page_match || drupal_match_path($_GET['q'], $block->pages);
}
// When $block->visibility has a value of 0, the block is displayed on
// all pages except those listed in $block->pages. When set to 1, it