From f962de8a8a2c6d00b4f8cb79227b4d83233edb96 Mon Sep 17 00:00:00 2001 From: Peter Rotich <peter@enhancesoft.com> Date: Wed, 27 Nov 2013 15:09:14 +0000 Subject: [PATCH] Refactor user create Change fromForm routine takes the actual form and do validation and call fromVars with clean data Add fromVars to do the actual user creation (previously named fromForm. --- include/ajax.tickets.php | 12 +++++++----- include/ajax.users.php | 14 +------------- include/class.ticket.php | 2 +- include/class.user.php | 30 +++++++++++++++++++++++++----- 4 files changed, 34 insertions(+), 24 deletions(-) diff --git a/include/ajax.tickets.php b/include/ajax.tickets.php index cdf20fb30..efadebca3 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 bbc19fc72..5126ca121 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 aab67fb65..e61bdf05d 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 36823db84..85a01d784 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; } -- GitLab