How to redirect to another page after submitting the ctools modal form Actually i want to redirect to some other page after submitting the multistep ctools modal form .I have tried using form_state['redirect] and drupal_goto in submit function but didnt work.

function get_quote_menu(){

$items=array();
$items['get_quote'] = array(
  'title' =&gt; 'Get Quotation',
  'page callback' =&gt; 'get_quote_form',
  'access callback' =&gt; TRUE,
  'type' =&gt; MENU_CALLBACK,
);
$items['get_quote/%ctools_js/details'] = array(
  'title' =&gt; 'Get Quotation',
  'page callback' =&gt; 'quote_ajax_details_form',
  'page arguments' =&gt; array(1),
  'access callback' =&gt; TRUE,
  'type' =&gt; MENU_CALLBACK,
);
return $items;
}
function quote_ajax_details_form($js = NULL, $step = NULL){

if ($js) {

    ctools_include('modal');
    ctools_include('ajax');
 }
  $form_info=array(

    'id' =&gt; 'quote_details',
    'path' =&gt; "get_quote/" . ($js ? 'ajax' : 'nojs') . "/details/%step",
    'show trail' =&gt; TRUE,
    'show back' =&gt; TRUE,
    'show cancel' =&gt; TRUE,
    'show return' =&gt; FALSE,
    'next callback' =&gt;  'get_quote_details_next',
    'finish callback' =&gt; 'get_quote_details_finish',
    'cancel callback' =&gt; 'get_quote_details_cancel',    

    'order' =&gt; array(
        'start' =&gt; t('View the plans and premiums best suited to you &lt;br/&gt;in 4 straight forward steps.'),
        'second'=&gt;t(''),
    ),

    'forms' =&gt; array(
        'start' =&gt; array(
            'form id' =&gt; 'get_quote_start',
       ),
       'second'=&gt;array(
            'form id'=&gt; 'get_actual_quote_details',
       )
    ),
);

$object_id = 1;

if (empty($step)) {
// We reset the form when $step is NULL because that means they have
// for whatever reason started over.
get_quote_cache_clear($object_id);
$step = 'start';
}

// This automatically gets defaults if there wasn't anything saved.
$object = get_quote_cache_get($object_id);


$form_state = array(
'ajax' =&gt; $js,
// Put our object and ID into the form state cache so we can easily find
// it.
'object_id' =&gt; $object_id,
'object' =&gt; &amp;$object,
);


ctools_include('wizard');
$form = ctools_wizard_multistep_form($form_info, $step, $form_state);
$output = drupal_render($form);

if($js){

$commands=array();

if($output===FALSE  || !empty($form_state['complete'])){


  $commands[] = ajax_command_html('#ctools-sample', finish($form_state['object']));
  $commands[] = ctools_modal_command_dismiss();    

}else if(!empty($form_state['cancel'])) {

    $commands[] = ctools_modal_command_dismiss();

}else {

     $commands = ctools_modal_form_render($form_state, $output);
}

 print ajax_render($commands);
 exit; 
}else{

 return $output;

 }
}
 function get_quote_start($form, &amp;$form_state){
            $form['first_name'] = array(

'#title' =&gt; t('Your Name'),
'#type' =&gt; 'textfield',
'#size'=&gt;20,
'#default_value' =&gt; $form_state['object']-&gt;first_name,
'#attributes'=&gt;array(
    'placeholder'=&gt;t('First Name'),
    'id'=&gt;array('quote-first-name'),
),
//'#required'=&gt;true,
);
$form['middle_name'] = array(
'#type' =&gt; 'textfield',
'#default_value' =&gt; $form_state['object']-&gt;middle_name,
'#size'=&gt;20,
'#attributes'=&gt;array(
    'placeholder'=&gt;t('Middle Name'),
    'id'=&gt;array('quote-middle-name'),
 ),
//'#required'=&gt;true,
);
 return $form;
}
 function get_quote_start_submit(&amp;$form, &amp;$form_state){

global $user;


 $form_state['object']-&gt;uid=$user-&gt;uid;
}
function get_actual_quote_details($form, &amp;$form_state){
$form['adults']=array(

    '#type'=&gt;'select',
    '#title' =&gt; t('Adults'),
    '#options'=&gt;array(
        1=&gt;1,
        2=&gt;2,
        3=&gt;3,
    ),

 );
return $form;
}
function get_actual_quote_details_submit(&amp;$form, &amp;$form_state){

    // Not working redirect 
       // drupal_goto('node/add/page');
        $form_state['redirect]='node/add/page',
}
This is a bit old, but hopefully it'll help someone. Down where you write your commands[] array. Change it to something like this. In the submit function of one of the earlier forms I set the redirectpath parameter on the object, then i just use that in ctools_ajax_command_redirect() after calling the dismiss modal function ctools_modal_command_dismiss().

  // If $output is FALSE, there was no actual form.
  $commands = array();
  if ($output === FALSE || !empty($form_state['complete'])) {
    // Dismiss the modal.
    $finish = _aap_main_add_finish($form_state['object']);
    $commands[] = ctools_modal_command_dismiss();
    ctools_add_js('ajax-responder');
    $commands[] = ajax_command_html('#ctools-sample', $finish);
    $commands[] = ctools_modal_command_dismiss();
    $commands[] = ctools_ajax_command_redirect($form_state['object']-&gt;redirectpath);
  }
  else if (!empty($form_state['cancel'])) {
    // If cancelling, return to the activity.
    $commands[] = ctools_modal_command_dismiss();
  }
  else {
    $commands = ctools_modal_form_render($form_state, $output);
  }