Commit 3cfff373 authored by alexpott's avatar alexpott

Issue #2301975 by kim.pepper: Move drupal_is_front_page to PathMatcher service.

parent 7fe5f2ac
...@@ -15,20 +15,12 @@ ...@@ -15,20 +15,12 @@
* *
* @return * @return
* Boolean value: TRUE if the current page is the front page; FALSE if otherwise. * Boolean value: TRUE if the current page is the front page; FALSE if otherwise.
*
* @deprecated as of Drupal 8.0. Use
* \Drupal\Core\Path\PathMatcherInterface::isFrontPage() instead.
*/ */
function drupal_is_front_page() { function drupal_is_front_page() {
// Use the advanced drupal_static() pattern, since this is called very often. return \Drupal::service('path.matcher')->isFrontPage();
static $drupal_static_fast;
if (!isset($drupal_static_fast)) {
$drupal_static_fast['is_front_page'] = &drupal_static(__FUNCTION__);
}
$is_front_page = &$drupal_static_fast['is_front_page'];
if (!isset($is_front_page)) {
$is_front_page = (current_path() == \Drupal::config('system.site')->get('page.front'));
}
return $is_front_page;
} }
/** /**
......
...@@ -14,6 +14,13 @@ ...@@ -14,6 +14,13 @@
*/ */
class PathMatcher implements PathMatcherInterface { class PathMatcher implements PathMatcherInterface {
/**
* Whether the current page is the front page.
*
* @var bool
*/
protected $isCurrentFrontPage;
/** /**
* The default front page. * The default front page.
* *
...@@ -51,10 +58,6 @@ public function __construct(ConfigFactoryInterface $config_factory) { ...@@ -51,10 +58,6 @@ public function __construct(ConfigFactoryInterface $config_factory) {
public function matchPath($path, $patterns) { public function matchPath($path, $patterns) {
if (!isset($this->regexes[$patterns])) { if (!isset($this->regexes[$patterns])) {
// Lazy-load front page config.
if (!isset($this->frontPage)) {
$this->frontPage = $this->configFactory->get('system.site')->get('page.front');
}
// Convert path settings to a regular expression. // Convert path settings to a regular expression.
$to_replace = array( $to_replace = array(
// Replace newlines with a logical 'or'. // Replace newlines with a logical 'or'.
...@@ -67,11 +70,37 @@ public function matchPath($path, $patterns) { ...@@ -67,11 +70,37 @@ public function matchPath($path, $patterns) {
$replacements = array( $replacements = array(
'|', '|',
'.*', '.*',
'\1' . preg_quote($this->frontPage, '/') . '\2', '\1' . preg_quote($this->getFrontPagePath(), '/') . '\2',
); );
$patterns_quoted = preg_quote($patterns, '/'); $patterns_quoted = preg_quote($patterns, '/');
$this->regexes[$patterns] = '/^(' . preg_replace($to_replace, $replacements, $patterns_quoted) . ')$/'; $this->regexes[$patterns] = '/^(' . preg_replace($to_replace, $replacements, $patterns_quoted) . ')$/';
} }
return (bool) preg_match($this->regexes[$patterns], $path); return (bool) preg_match($this->regexes[$patterns], $path);
} }
/**
* {@inheritdoc}
*/
public function isFrontPage() {
// Cache the result as this is called often.
if (!isset($this->isCurrentFrontPage)) {
$this->isCurrentFrontPage = (current_path() == $this->getFrontPagePath());
}
return $this->isCurrentFrontPage;
}
/**
* Gets the current front page path.
*
* @return string
* The front page path.
*/
protected function getFrontPagePath() {
// Lazy-load front page config.
if (!isset($this->frontPage)) {
$this->frontPage = $this->configFactory->get('system.site')
->get('page.front');
}
return $this->frontPage;
}
} }
...@@ -25,4 +25,12 @@ interface PathMatcherInterface { ...@@ -25,4 +25,12 @@ interface PathMatcherInterface {
*/ */
public function matchPath($path, $patterns); public function matchPath($path, $patterns);
/**
* Checks if the current page is the front page.
*
* @return bool
* TRUE if the current page is the front page.
*/
public function isFrontPage();
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment