4 * Placeholder page which generates a redirect
8 * <path>civicrm/admin/options/case_type</path>
9 * <page_callback>CRM_Core_Page_Redirect</page_callback>
10 * <page_arguments>url=civicrm/foo/bar?whiz=bang&passthru=%%passthru%%</page_arguments>
14 class CRM_Core_Page_Redirect
extends CRM_Core_Page
{
15 public function run($path = NULL, $pageArgs = array()) {
16 $url = self
::createUrl($path, $_REQUEST, $pageArgs, TRUE);
18 CRM_Utils_System
::redirect($url);
22 * @param array $requestPath
23 * The parts of the path in the current page request.
24 * @param array $requestArgs
26 * @param array $pageArgs
27 * The page_arguments registered in the router.
28 * @param bool $absolute
29 * Whether to return an absolute URL.
33 public static function createUrl($requestPath, $requestArgs, $pageArgs, $absolute) {
34 if (empty($pageArgs['url'])) {
35 CRM_Core_Error
::fatal('This page is configured as a redirect, but it does not have a target.');
39 // note: %% isn't legal in a well-formed URL, so it's not a bad variable-delimiter
40 foreach ($requestPath as $pathPos => $pathPart) {
41 $vars["%%{$pathPos}%%"] = urlencode($pathPart);
43 foreach ($requestArgs as $var => $value) {
44 $vars["%%{$var}%%"] = urlencode($value);
46 $urlString = strtr($pageArgs['url'], $vars);
47 $urlString = preg_replace('/%%[a-zA-Z0-9]+%%/', '', $urlString);
49 $urlParts = parse_url($urlString);
50 $url = CRM_Utils_System
::url(
52 CRM_Utils_Array
::value('query', $urlParts, NULL),
54 CRM_Utils_Array
::value('fragment', $urlParts, NULL)