diff --git a/include/class.user.php b/include/class.user.php index f930379b8bc940b213975d32de8f7054f2aee0e4..a52c239b2f2912195196d2d3e5de28ad24313258 100644 --- a/include/class.user.php +++ b/include/class.user.php @@ -103,12 +103,13 @@ class UserModel extends VerySimpleModel { return $this->org; } - function setOrganization($org) { + function setOrganization($org, $save=true) { if (!$org instanceof Organization) return false; $this->set('org', $org); - $this->save(); + if ($save) + $this->save(); return true; } @@ -146,8 +147,12 @@ class User extends UserModel { // Try and lookup by email address $user = static::lookupByEmail($vars['email']); if (!$user) { + $name = $vars['name']; + if (!$name) + list($name) = explode('@', $vars['email'], 2); + $user = User::create(array( - 'name'=>$vars['name'], + 'name'=>$name, 'created'=>new SqlFunction('NOW'), 'updated'=>new SqlFunction('NOW'), //XXX: Do plain create once the cause @@ -156,13 +161,20 @@ class User extends UserModel { )); // Is there an organization registered for this domain list($mailbox, $domain) = explode('@', $vars['email'], 2); - if ($org = Organization::forDomain($domain)) - $user->setOrganization($org); - - $user->save(true); - $user->emails->add($user->default_email); - // Attach initial custom fields - $user->addDynamicData($vars); + if (isset($vars['org_id'])) + $user->set('org_id', $vars['org_id']); + elseif ($org = Organization::forDomain($domain)) + $user->setOrganization($org, false); + + try { + $user->save(true); + $user->emails->add($user->default_email); + // Attach initial custom fields + $user->addDynamicData($vars); + } + catch (OrmException $e) { + return null; + } } return $user;