<?php
use Symfony\Component\HttpFoundation\Request;
function drupal_is_front_page() {
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() == config('system.site')
->get('page.front');
}
return $is_front_page;
}
function drupal_match_path($path, $patterns) {
$regexps =& drupal_static(__FUNCTION__);
if (!isset($regexps[$patterns])) {
$to_replace = array(
'/(\\r\\n?|\\n)/',
'/\\\\\\*/',
'/(^|\\|)\\\\<front\\\\>($|\\|)/',
);
$replacements = array(
'|',
'.*',
'\\1' . preg_quote(config('system.site')
->get('page.front'), '/') . '\\2',
);
$patterns_quoted = preg_quote($patterns, '/');
$regexps[$patterns] = '/^(' . preg_replace($to_replace, $replacements, $patterns_quoted) . ')$/';
}
return (bool) preg_match($regexps[$patterns], $path);
}
function current_path() {
if (drupal_container()
->isScopeActive('request')) {
$path = drupal_container()
->get('request')->attributes
->get('system_path');
if ($path !== NULL) {
return $path;
}
}
return _current_path();
}
function path_load($conditions) {
if (is_numeric($conditions)) {
$conditions = array(
'pid' => $conditions,
);
}
elseif (is_string($conditions)) {
$conditions = array(
'source' => $conditions,
);
}
elseif (!is_array($conditions)) {
return FALSE;
}
return drupal_container()
->get('path.crud')
->load($conditions);
}
function path_is_admin($path) {
$path_map =& drupal_static(__FUNCTION__);
if (!isset($path_map['admin'][$path])) {
$patterns = path_get_admin_paths();
$path_map['admin'][$path] = drupal_match_path($path, $patterns['admin']);
$path_map['non_admin'][$path] = drupal_match_path($path, $patterns['non_admin']);
}
return $path_map['admin'][$path] && !$path_map['non_admin'][$path];
}
function path_get_admin_paths() {
$patterns =& drupal_static(__FUNCTION__);
if (!isset($patterns)) {
$paths = module_invoke_all('admin_paths');
drupal_alter('admin_paths', $paths);
$patterns = array();
$patterns['admin'] = array();
$patterns['non_admin'] = array();
foreach ($paths as $path => $enabled) {
if ($enabled) {
$patterns['admin'][] = $path;
}
else {
$patterns['non_admin'][] = $path;
}
}
$patterns['admin'] = implode("\n", $patterns['admin']);
$patterns['non_admin'] = implode("\n", $patterns['non_admin']);
}
return $patterns;
}
function drupal_valid_path($path, $dynamic_allowed = FALSE) {
global $menu_admin;
$menu_admin = TRUE;
if ($path == '<front>' || url_is_external($path)) {
$item = array(
'access' => TRUE,
);
}
elseif ($dynamic_allowed && preg_match('/\\/\\%/', $path)) {
if ($item = db_query("SELECT * FROM {menu_router} where path = :path", array(
':path' => $path,
))
->fetchAssoc()) {
$item['link_path'] = $form_item['link_path'];
$item['link_title'] = $form_item['link_title'];
$item['external'] = FALSE;
$item['options'] = '';
_menu_link_translate($item);
}
if (empty($item['access'])) {
$item = _drupal_valid_path_new_router($path);
}
}
else {
$item = menu_get_item($path);
if (empty($item['access'])) {
$item = _drupal_valid_path_new_router($path);
}
}
$menu_admin = FALSE;
return $item && $item['access'];
}
function _drupal_valid_path_new_router($path) {
$request = Request::create('/' . $path);
$request->attributes
->set('system_path', $path);
try {
$dc = drupal_container();
$route = $dc
->get('router.dynamic')
->matchRequest($request);
if (!empty($route)) {
$dc
->get('access_manager')
->check($route['_route_object'], $request);
}
return array(
'access' => TRUE,
);
} catch (Exception $e) {
drupal_set_message($e
->getMessage(), 'menu', WATCHDOG_ERROR);
}
}