get('page.front')); } return $is_front_page; } /** * 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) { $regexps = &drupal_static(__FUNCTION__); if (!isset($regexps[$patterns])) { // Convert path settings to a regular expression. // Therefore replace newlines with a logical or, /* with asterisks and the with the frontpage. $to_replace = array( '/(\r\n?|\n)/', // newlines '/\\\\\*/', // asterisks '/(^|\|)\\\\($|\|)/' // ); $replacements = array( '|', '.*', '\1' . preg_quote(\Drupal::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); } /** * Return the current URL path of the page being viewed. * * Examples: * - http://example.com/node/306 returns "node/306". * - http://example.com/drupalfolder/node/306 returns "node/306" while * base_path() returns "/drupalfolder/". * - http://example.com/path/alias (which is a path alias for node/306) returns * "node/306" as opposed to the path alias. * * This function is available only after DRUPAL_BOOTSTRAP_FULL. * * @return * The current Drupal URL path. * * @see request_path() */ function current_path() { // @todo Remove the check for whether the request service exists and the // fallback code below, once the path alias logic has been figured out in // http://drupal.org/node/1269742. if (\Drupal::getContainer()->isScopeActive('request')) { $path = \Drupal::request()->attributes->get('_system_path'); if ($path !== NULL) { return $path; } } // If we are outside the request scope, fall back to using the path stored in // _current_path(). return _current_path(); } /** * Determines whether a path is in the administrative section of the site. * * By default, paths are considered to be non-administrative. If a path does * not match any of the patterns in path_get_admin_paths(), or if it matches * both administrative and non-administrative patterns, it is considered * non-administrative. * * @param $path * A Drupal path. * * @return * TRUE if the path is administrative, FALSE otherwise. * * @deprecated Use \Drupal::service('router.admin_context')->isAdminRoute() * service instead. */ function path_is_admin($path) { try { $parameters = \Drupal::service('router')->match('/' . $path); $route = $parameters[RouteObjectInterface::ROUTE_OBJECT]; return \Drupal::service('router.admin_context')->isAdminRoute($route); } catch (ParamNotConvertedException $e) { return FALSE; } } /** * Checks a path exists and the current user has access to it. * * @param string $path * The path to check. * * @return bool * TRUE if it is a valid path AND the current user has access permission, * FALSE otherwise. */ function drupal_valid_path($path) { // External URLs and the front page are always valid. if ($path == '' || UrlHelper::isExternal($path)) { return TRUE; } // Check the routing system. $collection = \Drupal::service('router.route_provider')->getRoutesByPattern('/' . $path); if ($collection->count() == 0) { return FALSE; } $request = RequestHelper::duplicate(\Drupal::request(), '/' . $path); $request->attributes->set('_system_path', $path); // We indicate that a menu administrator is running the menu access check. $request->attributes->set('_menu_admin', TRUE); // Attempt to match this path to provide a fully built request to the // access checker. try { $request->attributes->add(\Drupal::service('router')->matchRequest($request)); } catch (ParamNotConvertedException $e) { return FALSE; } // Consult the accsss manager. $routes = $collection->all(); $route = reset($routes); return \Drupal::service('access_manager')->check($route, $request, \Drupal::currentUser()); }