[development] drupal_goto an external destination

Dave Cohen drupal at dave-cohen.com
Tue May 6 07:49:27 UTC 2008


I need to send the user to an external URL after a form submit.  My approach 
is to set $form['destination'] via hook_form_alter.  When the form is 
submitted, drupal_goto is called.  In drupal_goto, my destination gets badly 
munged and the user is sent to the wrong URL.

In my case, I'm trying to send the user to 
http://apps.facebook.com/my_application/my_path.  But the user gets sent 
instead to http://my_domain.com/drupal/%252Fmy_application/my_path.

The reason for this is at the start of drupal_goto.  It looks like this:

  if (isset($_REQUEST['destination'])) {
    extract(parse_url(urldecode($_REQUEST['destination'])));
  }
  else if (isset($_REQUEST['edit']['destination'])) {
    extract(parse_url(urldecode($_REQUEST['edit']['destination'])));
  }

  $url = url($path, $query, $fragment, TRUE);

The use of extract() makes the code nearly impossible to understand, unless 
you find perl intuitive, but I digress...  

During extract() $path, $query, and $fragment all get set.  So does $scheme, 
$host, $user and $pass.  But drupal_goto does nothing with the latter 
variables, and in my case important parts of the URL are dropped.

Is there even a reason why parse_url is used here?  Why not something closer 
to:

if (isset($_REQUEST['destination']))
   $url = url($_REQUEST['destination'])
else
   ...

And is there a workaround for me without patching core?

Thanks,

-Dave


More information about the development mailing list