'Login Destination', 'description' => 'Control where users are directed to once they login.', 'page callback' => 'drupal_get_form', 'page arguments' => array('login_destination_admin_settings'), 'access arguments' => array(LOGIN_DEST_PERM_ADMIN), 'type' => MENU_NORMAL_ITEM ); return $items; } function login_destination_admin_settings() { $form = array(); $form['destination'] = array( '#type' => 'fieldset', '#title' => t('URL destination settings'), '#description' => t('This is to specify where exactly user should be redirected upon login.') ); $form['destination']['ld_destination'] = array( '#type' => 'checkbox', '#default_value' => variable_get('ld_destination', TRUE), '#title' => t('Preserve destination'), '#description' => t("If checked, 'destination=' parameter specified in the URL will be used to perform redirection. Otherwise, redirection will be always performed according to the settings below."), ); $form['destination']['ld_url_type'] = array( '#type' => 'radios', '#default_value' => variable_get('ld_url_type', LOGIN_DEST_STATIC), '#options' => array( LOGIN_DEST_STATIC => t('Static URL'), LOGIN_DEST_SNIPPET => t('PHP snippet (experts only)') ) ); $form['destination']['ld_url_destination'] = array( '#type' => 'textarea', '#default_value' => variable_get('ld_url_destination', 'user'), '#title' => t('URL'), '#rows' => 4, '#description' => t('Static URL mode: Enter a static path. Example paths are %ex1 or %ex2.', array('%ex1' => 'node/add', '%ex2' => 'workspace')). '
'. t("PHP snippet mode: Enter PHP code to evaluate path (NO %php tags!). It should return either a string value or an array('path' => path/alias to redirect, 'query' => parameters, ... [other parameters are equal to the url() function specification]).", array('%php' => '')) ); $form['condition'] = array( '#type' => 'fieldset', '#title' => t('Redirection condition settings'), '#description' => t('Set the condition to determine whether redirection should happen or not.') ); $form['condition']['ld_condition_type'] = array( '#type' => 'radios', '#default_value' => variable_get('ld_condition_type', 'always'), '#options' => array( LOGIN_COND_ALWAYS => t('Always'), LOGIN_COND_PAGES => t('List of paths'), LOGIN_COND_SNIPPET => t('PHP snippet (experts only)') ) ); $form['condition']['ld_condition_snippet'] = array( '#type' => 'textarea', '#default_value' => variable_get('ld_condition_snippet', ''), '#title' => t('Redirect condition'), '#rows' => 4, '#description' => t('Always: Redirection happens always. Redirect condition field is ignored.'). '
'. t('List of paths mode: Enter a list of paths, one path per one line. Redirection will happen only when logging from specified pages. Example paths are %ex1 or %ex2.', array('%ex1' => 'contact', '%ex2' => 'user/login')). '
'. t('PHP snippet mode: Enter PHP code to find should redirection happen or not (NO %php tags!). It should return boolean value.', array('%php' => '')) ); return system_settings_form($form); } /** * Implementation of hook_user. */ function login_destination_user($op, &$edit, &$account, $category = NULL) { switch($op) { case 'login': global $language; $destination = variable_get('ld_url_destination', 'user'); if (variable_get('ld_url_type', LOGIN_DEST_STATIC) == LOGIN_DEST_SNIPPET) { ob_start(); $url = eval($destination); ob_end_clean(); } else { $url = $destination; } if (is_array($url) && !empty($url['path'])) { $path = $url['path']; unset($url['path']); $base = base_path(); if (!empty($language->prefix)) { $base .= $language->prefix. '/'; } $url = str_replace($base, '', url($path, $url)); } } if (login_destination_apply_redirect()) { $_REQUEST['destination'] = $url; } } /** * A helper function to determine whether redirection should happen. * * @return bool TRUE - apply redirect, FALSE - not to apply redirect. */ function login_destination_apply_redirect() { if ($_GET['destination'] != $_GET['q'] && variable_get('ld_destination', TRUE)) { return FALSE; } $mode = variable_get('ld_condition_type', LOGIN_COND_ALWAYS); if (LOGIN_COND_ALWAYS == $mode) { return TRUE; } else { $cond = variable_get('ld_condition_snippet', ''); if (LOGIN_COND_PAGES == $mode) { $paths = split("[\n\r]", $cond); return in_array($_GET['q'], $paths); } elseif (LOGIN_COND_SNIPPET == $mode) { $destination = variable_get('ld_url_destination', 'user'); return drupal_eval(''); } } }