From 2f3732a9d713d76bb1bffc0e9a2e9a27433dfa04 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Frank=20J=2E=20G=C3=B3mez?= Date: Wed, 22 Jul 2015 18:55:59 -0400 Subject: [PATCH] Move URL building logic into the hook handler so that extension developers don't have to write the same code over and over. --- CRM/Event/Form/ManageEvent/TabHeader.php | 32 +++++++++++++++++------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/CRM/Event/Form/ManageEvent/TabHeader.php b/CRM/Event/Form/ManageEvent/TabHeader.php index dbde3adbaa..0f885853b9 100644 --- a/CRM/Event/Form/ManageEvent/TabHeader.php +++ b/CRM/Event/Form/ManageEvent/TabHeader.php @@ -199,22 +199,36 @@ WHERE e.id = %1 $action = 'browse'; } - if (isset($value['link'])) { - $tabs[$key]['link'] = $value['link']; - } else { - $link = "civicrm/event/manage/{$key}"; - $query = "{$reset}action={$action}&id={$eventID}&component=event{$tabs[$key]['qfKey']}"; - $tabs[$key]['link'] = CRM_Utils_System::url($link, $query); - } + $link = "civicrm/event/manage/{$key}"; + $query = "{$reset}action={$action}&id={$eventID}&component=event{$tabs[$key]['qfKey']}"; + $tabs[$key]['link'] = (isset($value['link']) ? self::url($value['link']) : + CRM_Utils_System::url($link, $query)); } } -// var_dump($tabs); die(); - return $tabs; } + // wraps CRM_Utils_System. assumes relative URL. needs real doc :-) + public static function url($url) { + // parse_url doesn't work with relative URLs, so we make the URL absolute + $url = 'http://discard/' . $url; + $urlParts = parse_url($url); + $path = (strpos($urlParts['path'], '/') === 0 ? substr($urlParts['path'], 1) : $urlParts['path']); + + $params = parse_str(CRM_Utils_Array::value('query', $urlParts)); + + // PHP doesn't know about URL fragments (i.e, what comes after the #), so + // we translate this to a URL param + $params['route'] = $urlParts['fragment']; + + // Force the Angular route to load as a snippet. This is being rendered in a tab, after all. + $params['snippet'] = CRM_Core_Smarty::PRINT_SNIPPET; + + return CRM_Utils_System::url($path, http_build_query($params)); + } + /** * @param CRM_Event_Form_ManageEvent $form */ -- 2.25.1