You are here

function cas_user in CAS 6.3

Implementation of hook_user().

Delete: When a CAS user is deleted, we need to clean up the entry in {cas_user}. Insert: When a user is created, record their CAS username if provided. Load: Adds an associative array 'cas_names' to each user. The array keys are unique authentication mapping ids, with CAS usernames as the values. Update: When a user is updated, change their CAS username if provided.

2 string references to 'cas_user'
cas_update_6301 in ./cas.install
Migrate authmap entries to new {cas_user} table.
cas_update_6305 in ./cas.install
Add index on cas_user.uid

File

./cas.module, line 484
Enables users to authenticate via a Central Authentication Service (CAS) Cas will currently work if the auto registration is turned on and will create user accounts automatically.

Code

function cas_user($op, &$edit, &$account) {
  if ($op == 'delete') {
    db_query("DELETE FROM {cas_user} WHERE uid = %d", $account->uid);
  }
  elseif ($op == 'insert') {
    if (!empty($edit['cas_name'])) {
      db_query("INSERT INTO {cas_user} (uid, cas_name) VALUES (%d, '%s')", $account->uid, $edit['cas_name']);
    }
    $edit['cas_name'] = NULL;
  }
  elseif ($op == 'load') {
    $account->cas_names = array();
    $result = db_query('SELECT aid, cas_name FROM {cas_user} WHERE uid = %d', $account->uid);
    while ($record = db_fetch_object($result)) {
      $account->cas_names[$record->aid] = $record->cas_name;
    }
    $account->cas_name = reset($account->cas_names);
  }
  elseif ($op == 'update') {
    if (!array_key_exists('cas_name', $edit)) {

      // If the cas_name key is not provided, there is nothing to do.
      return;
    }
    $cas_name = $edit['cas_name'];

    // See if the user currently has any CAS names.
    reset($account->cas_names);
    if ($aid = key($account->cas_names)) {

      // The user already has CAS username(s) set.
      if (empty($cas_name)) {

        // Remove a CAS username.
        db_query("DELETE FROM {cas_user} WHERE uid = %d AND aid = %d", $account->uid, $aid);
      }
      else {

        // Change a CAS username.
        if ($cas_name != $account->cas_names[$aid]) {
          db_query("UPDATE {cas_user} SET cas_name = '%s' WHERE aid = %d", $cas_name, $aid);
        }
      }
    }
    else {

      // No current CAS usernames.
      if (!empty($cas_name)) {

        // Add a CAS username.
        db_query("INSERT INTO {cas_user} (uid, cas_name) VALUES (%d, '%s')", $account->uid, $edit['cas_name']);
      }
    }
    $edit['cas_name'] = NULL;
  }
}