thomascube
2009-05-14 f879f4e2f8c81f67b0a0c471c94ebed686939c49
Trigger 'create_identity' when creating a new user; Allow 'create_user' hook to abort the operation

3 files modified
38 ■■■■ changed files
program/include/rcmail.php 7 ●●●●● patch | view | raw | blame | history
program/include/rcube_user.php 29 ●●●● patch | view | raw | blame | history
program/steps/settings/save_identity.inc 2 ●●● patch | view | raw | blame | history
program/include/rcmail.php
@@ -491,6 +491,13 @@
        // get existing mailboxes (but why?)
        // $a_mailboxes = $this->imap->list_mailboxes();
      }
      else {
        raise_error(array(
          'code' => 600,
          'type' => 'php',
          'message' => "Failed to create a user record. Maybe aborted by a plugin?"
          ), true, false);
      }
    }
    else {
      raise_error(array(
program/include/rcube_user.php
@@ -353,6 +353,10 @@
    $data = $rcmail->plugins->exec_hook('create_user', array('user'=>$user, 'user_name'=>$user_name, 'user_email'=>$user_email));
    $user_name = $data['user_name'];
    $user_email = $data['user_email'];
    // plugin aborted this operation
    if ($data['abort'])
      return false;
    $dbh = $rcmail->get_dbh();
@@ -392,14 +396,23 @@
      // create new identities records
      $standard = 1;
      foreach ($email_list as $email) {
        $dbh->query(
            "INSERT INTO ".get_table_name('identities')."
              (user_id, del, standard, name, email)
             VALUES (?, 0, ?, ?, ?)",
            $user_id,
            $standard,
            strip_newlines($user_name),
            preg_replace('/^@/', $user . '@', $email));
        $plugin = $RCMAIL->plugins->exec_hook('create_identity', array('record' => array(
          'login' => true,
          'user_id' => $user_id,
          'name' => strip_newlines($user_name),
          'email' => $email,
          'standard' => $standard)));
        if (!$plugin['abort'] && $plugin['record']['name'] && $plugin['record']['email']) {
          $dbh->query(
              "INSERT INTO ".get_table_name('identities')."
                (user_id, del, standard, name, email)
               VALUES (?, 0, ?, ?, ?)",
              $user_id,
              $plugin['record']['standard'],
              $plugin['record']['name'],
              $plugin['record']['email']);
        }
        $standard = 0;
      }
    }
program/steps/settings/save_identity.inc
@@ -92,7 +92,7 @@
  if (IDENTITIES_LEVEL == 1)
    $save_data['email'] = $RCMAIL->user->get_username();
  $plugin = $RCMAIL->plugins->exec_hook('create_identity', array('id' => $iid, 'record' => $save_data));
  $plugin = $RCMAIL->plugins->exec_hook('create_identity', array('record' => $save_data));
  $save_data = $plugin['record'];
  if (!$plugin['abort'] && $save_data['email'] && ($insert_id = $USER->insert_identity($save_data)))