cms/drupal/modules/openid/openid.pages.inc
changeset 541 e756a8c72c3d
equal deleted inserted replaced
540:07239de796bb 541:e756a8c72c3d
       
     1 <?php
       
     2 
       
     3 /**
       
     4  * @file
       
     5  * User page callbacks for the openid module.
       
     6  */
       
     7 
       
     8 /**
       
     9  * Menu callback; Process an OpenID authentication.
       
    10  */
       
    11 function openid_authentication_page() {
       
    12   $result = openid_complete();
       
    13   switch ($result['status']) {
       
    14     case 'success':
       
    15       return openid_authentication($result);
       
    16     case 'failed':
       
    17       drupal_set_message(t('OpenID login failed.'), 'error');
       
    18       break;
       
    19     case 'cancel':
       
    20       drupal_set_message(t('OpenID login cancelled.'));
       
    21       break;
       
    22   }
       
    23   drupal_goto();
       
    24 }
       
    25 
       
    26 /**
       
    27  * Menu callback; Manage OpenID identities for the specified user.
       
    28  */
       
    29 function openid_user_identities($account) {
       
    30   drupal_set_title(format_username($account));
       
    31   drupal_add_css(drupal_get_path('module', 'openid') . '/openid.css');
       
    32 
       
    33   // Check to see if we got a response
       
    34   $result = openid_complete();
       
    35   if ($result['status'] == 'success') {
       
    36     $identity = $result['openid.claimed_id'];
       
    37     $query = db_insert('authmap')
       
    38       ->fields(array(
       
    39         'uid' => $account->uid,
       
    40         'authname' => $identity,
       
    41         'module' => 'openid',
       
    42       ))
       
    43       ->execute();
       
    44     drupal_set_message(t('Successfully added %identity', array('%identity' => $identity)));
       
    45   }
       
    46 
       
    47   $header = array(t('OpenID'), t('Operations'));
       
    48   $rows = array();
       
    49 
       
    50   $result = db_query("SELECT * FROM {authmap} WHERE module='openid' AND uid=:uid", array(':uid' => $account->uid));
       
    51   foreach ($result as $identity) {
       
    52     $rows[] = array(check_plain($identity->authname), l(t('Delete'), 'user/' . $account->uid . '/openid/delete/' . $identity->aid));
       
    53   }
       
    54 
       
    55   $build['openid_table'] = array(
       
    56     '#theme' => 'table',
       
    57     '#header' => $header,
       
    58     '#rows' => $rows,
       
    59     '#empty' => t('No OpenID identities available for this account.'),
       
    60   );
       
    61   $build['openid_user_add'] = drupal_get_form('openid_user_add');
       
    62   return $build;
       
    63 }
       
    64 
       
    65 /**
       
    66  * Form builder; Add an OpenID identity.
       
    67  *
       
    68  * @ingroup forms
       
    69  * @see openid_user_add_validate()
       
    70  */
       
    71 function openid_user_add() {
       
    72   $form['openid_identifier'] = array(
       
    73     '#type' => 'textfield',
       
    74     '#title' => t('OpenID'),
       
    75   );
       
    76   $form['actions'] = array('#type' => 'actions');
       
    77   $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Add an OpenID'));
       
    78   return $form;
       
    79 }
       
    80 
       
    81 function openid_user_add_validate($form, &$form_state) {
       
    82   // Check for existing entries.
       
    83   $claimed_id = openid_normalize($form_state['values']['openid_identifier']);
       
    84   if (db_query("SELECT authname FROM {authmap} WHERE authname = :authname", (array(':authname' => $claimed_id)))->fetchField()) {
       
    85     form_set_error('openid_identifier', t('That OpenID is already in use on this site.'));
       
    86   }
       
    87 }
       
    88 
       
    89 function openid_user_add_submit($form, &$form_state) {
       
    90   $return_to = url('user/' . arg(1) . '/openid', array('absolute' => TRUE));
       
    91   openid_begin($form_state['values']['openid_identifier'], $return_to);
       
    92 }
       
    93 
       
    94 /**
       
    95  * Menu callback; Delete the specified OpenID identity from the system.
       
    96  */
       
    97 function openid_user_delete_form($form, $form_state, $account, $aid = 0) {
       
    98   $authname = db_query("SELECT authname FROM {authmap} WHERE uid = :uid AND aid = :aid AND module = 'openid'", array(
       
    99     ':uid' => $account->uid,
       
   100     ':aid' => $aid,
       
   101   ))
       
   102   ->fetchField();
       
   103   return confirm_form(array(), t('Are you sure you want to delete the OpenID %authname for %user?', array('%authname' => $authname, '%user' => $account->name)), 'user/' . $account->uid . '/openid');
       
   104 }
       
   105 
       
   106 function openid_user_delete_form_submit($form, &$form_state) {
       
   107   $query = db_delete('authmap')
       
   108     ->condition('uid', $form_state['build_info']['args'][0]->uid)
       
   109     ->condition('aid', $form_state['build_info']['args'][1])
       
   110     ->condition('module', 'openid')
       
   111     ->execute();
       
   112   if ($query) {
       
   113     drupal_set_message(t('OpenID deleted.'));
       
   114   }
       
   115   $form_state['redirect'] = 'user/' . $form_state['build_info']['args'][0]->uid . '/openid';
       
   116 }