* civicrm/admin/options/case_type
* CRM_Core_Page_Redirect
* url=civicrm/foo/bar?whiz=bang&passthru=%%passthru%%
*
* @endcoe
*/
class CRM_Core_Page_Redirect extends CRM_Core_Page {
/**
* Run page.
*
* @param string $path
* @param array $pageArgs
*/
public function run($path = NULL, $pageArgs = []) {
$url = self::createUrl($path, $_REQUEST, $pageArgs, TRUE);
CRM_Utils_System::redirect($url);
}
/**
* @param array $requestPath
* The parts of the path in the current page request.
* @param array $requestArgs
* Any GET arguments.
* @param array $pageArgs
* The page_arguments registered in the router.
* @param bool $absolute
* Whether to return an absolute URL.
* @return string
* URL
*/
public static function createUrl($requestPath, $requestArgs, $pageArgs, $absolute) {
if (empty($pageArgs['url'])) {
CRM_Core_Error::fatal('This page is configured as a redirect, but it does not have a target.');
}
$vars = [];
// note: %% isn't legal in a well-formed URL, so it's not a bad variable-delimiter
foreach ($requestPath as $pathPos => $pathPart) {
$vars["%%{$pathPos}%%"] = urlencode($pathPart);
}
foreach ($requestArgs as $var => $value) {
$vars["%%{$var}%%"] = urlencode($value);
}
$urlString = strtr($pageArgs['url'], $vars);
$urlString = preg_replace('/%%[a-zA-Z0-9]+%%/', '', $urlString);
$urlParts = parse_url($urlString);
$url = CRM_Utils_System::url(
$urlParts['path'],
CRM_Utils_Array::value('query', $urlParts, NULL),
$absolute,
CRM_Utils_Array::value('fragment', $urlParts, NULL)
);
return $url;
}
}