diff --git a/include/class.organization.php b/include/class.organization.php index 4f55f290b3d08d038c07c2d97552095d80932633..3342289557c1077eeabebe7dc86e21c9f9a4d679 100644 --- a/include/class.organization.php +++ b/include/class.organization.php @@ -166,6 +166,15 @@ class Organization extends OrganizationModel { return false; } + static function forDomain($domain) { + foreach (static::objects() + ->filter(array('domain__contains'=>$domain)) as $org) { + if ($org->isMappedToDomain($domain)) { + return $org; + } + } + } + function to_json() { $info = array( diff --git a/include/class.ticket.php b/include/class.ticket.php index 0bf1e57d7c80e088db109e2e989914d464dd55eb..57cfe653c4b14300cac586c1836881a6758a5ddc 100644 --- a/include/class.ticket.php +++ b/include/class.ticket.php @@ -2300,19 +2300,28 @@ class Ticket { // Allow vars to be changed in ticket filter and applied to the user // account created or detected + if (!$user && $vars['email']) + $user = User::lookupByEmail($vars['email']); + if (!$user) { + // Reject emails if not from registered clients (if + // configured) + if ($source == 'email' && !$cfg->acceptUnregisteredEmail()) { + list($mailbox, $domain) = explode('@', $vars['email'], 2); + // Users not yet created but linked to an organization + // are still acceptable + if (!Organization::forDomain($domain)) { + return $reject_ticket( + sprintf('Ticket rejected (%s) (unregistered client)', + $vars['email'])); + } + } + $user_form = UserForm::getUserForm()->getForm($vars); if (!$user_form->isValid($field_filter('user')) || !($user=User::fromVars($user_form->getClean()))) $errors['user'] = 'Incomplete client information'; } - - // Reject emails if not from registered clients (if configured) - if (!$cfg->acceptUnregisteredEmail() && !$user->getAccount()) { - return $reject_ticket( - sprintf('Ticket rejected (%s) (unregistered client)', - $vars['email'])); - } } // Any error above is fatal. diff --git a/include/class.user.php b/include/class.user.php index 8adb24ea07d5294cdcd2ad4d99331dd937c9789b..ac544e8f4c79bd384bc1570c8ddc177893accce9 100644 --- a/include/class.user.php +++ b/include/class.user.php @@ -144,7 +144,7 @@ class User extends UserModel { static function fromVars($vars) { // Try and lookup by email address - $user = User::lookup(array('emails__address'=>$vars['email'])); + $user = static::lookupByEmail($vars['email']); if (!$user) { $user = User::create(array( 'name'=>$vars['name'], @@ -156,13 +156,8 @@ class User extends UserModel { )); // Is there an organization registered for this domain list($mailbox, $domain) = explode('@', $vars['email'], 2); - foreach (Organization::objects() - ->filter(array('domain__contains'=>$domain)) as $org) { - if ($org->isMappedToDomain($domain)) { - $user->setOrganization($org); - break; - } - } + if ($org = Organization::forDomain($domain)) + $user->setOrganization($org); $user->save(true); $user->emails->add($user->default_email); @@ -396,6 +391,10 @@ class User extends UserModel { // Delete user return parent::delete(); } + + static function lookupByEmail($email) { + return self::lookup(array('emails__address'=>$email)); + } } class PersonsName {