diff --git a/include/ajax.tickets.php b/include/ajax.tickets.php index cdf20fb30dcebb58b3847ec15e04418a57ee2601..efadebca3587ecb338a9ce6f26fcc3da16f79b84 100644 --- a/include/ajax.tickets.php +++ b/include/ajax.tickets.php @@ -457,11 +457,13 @@ class TicketsAjaxAPI extends AjaxController { || !$ticket->checkStaffAccess($thisstaff)) Http::response(404, 'No such ticket'); - $errors = $info = array(); - $user = null; - $form = UserForm::getInstance(); - if ($form->isValid()) - $user = User::fromForm($form->getClean()); + $user = $form = null; + if (isset($_POST['id']) && $_POST['id']) { //Existing user/ + $user = User::lookup($_POST['id']); + } else { //We're creating a new user! + $form = UserForm::getUserForm()->getForm($_POST); + $user = User::fromForm($form); + } if ($user && ($c=$ticket->addCollaborator($user, $errors))) { $info +=array('msg' => sprintf('%s added as a collaborator', diff --git a/include/ajax.users.php b/include/ajax.users.php index bbc19fc72a3a7169841d6addc3d47262853fbe2c..5126ca1218e2f7cf0c71687b0dc0fc27302ffec0 100644 --- a/include/ajax.users.php +++ b/include/ajax.users.php @@ -66,22 +66,10 @@ class UsersAjaxAPI extends AjaxController { function addUser() { - $valid = true; $form = UserForm::getUserForm()->getForm($_POST); - if (!$form->isValid()) - $valid = false; - - if (($field=$form->getField('email')) - && $field->getClean() - && User::lookup(array('emails__address'=>$field->getClean()))) { - $field->addError('Email is assigned to another user'); - $valid = false; - } - - if ($valid && ($user = User::fromForm($form->getClean()))) + if (($user = User::fromForm($form))) Http::response(201, $user->to_json()); - $info = array('error' =>'Error adding user - try again!'); return self::_lookupform($form, $info); diff --git a/include/class.ticket.php b/include/class.ticket.php index aab67fb65735e5cb181523806b98c0ef70252b16..e61bdf05d954bbd77c6bee69e40f59af16f7a817 100644 --- a/include/class.ticket.php +++ b/include/class.ticket.php @@ -2111,7 +2111,7 @@ class Ticket { if (!$user) { $user_form = UserForm::getUserForm()->getForm($vars); if (!$user_form->isValid($field_filter) - || !($user=User::fromForm($user_form->getClean()))) + || !($user=User::fromVars($user_form->getClean()))) $errors['user'] = 'Incomplete client information'; } } diff --git a/include/class.user.php b/include/class.user.php index 36823db840c296f6b03414c3cb6eb7bf6b20c5b4..85a01d784b52f0084ed6a6504a754da05606b13b 100644 --- a/include/class.user.php +++ b/include/class.user.php @@ -76,26 +76,46 @@ class User extends UserModel { $this->default_email = UserEmail::lookup($ht['default_email_id']); } - static function fromForm($data=false) { + static function fromVars($vars=false) { // Try and lookup by email address - $user = User::lookup(array('emails__address'=>$data['email'])); + $user = User::lookup(array('emails__address'=>$vars['email'])); if (!$user) { $user = User::create(array( - 'name'=>$data['name'], + 'name'=>$vars['name'], 'created'=>new SqlFunction('NOW'), 'updated'=>new SqlFunction('NOW'), 'default_email'=> - UserEmail::create(array('address'=>$data['email'])) + UserEmail::create(array('address'=>$vars['email'])) )); $user->save(true); $user->emails->add($user->default_email); // Attach initial custom fields - $user->addDynamicData($data); + $user->addDynamicData($vars); } return $user; } + static function fromForm($form) { + + if(!$form) return null; + + //Validate the form + $valid = true; + if (!$form->isValid()) + $valid = false; + + //Make sure the email is not in-use + if (($field=$form->getField('email')) + && $field->getClean() + && User::lookup(array('emails__address'=>$field->getClean()))) { + $field->addError('Email is assigned to another user'); + $valid = false; + } + + return $valid ? self::fromVars($form->getClean()) : null; + } + function getEmail() { return $this->default_email->address; }