From cade4520b0eda6c4ceb6413d099bc3ee238acc90 Mon Sep 17 00:00:00 2001 From: Peter Rotich <peter@enhancesoft.com> Date: Mon, 11 Nov 2013 21:57:55 +0000 Subject: [PATCH] Unify user util routines --- include/ajax.forms.php | 67 +++++++------------------------------- include/class.user.php | 73 ++++++++++++++++++++++++++++++++++++++---- 2 files changed, 77 insertions(+), 63 deletions(-) diff --git a/include/ajax.forms.php b/include/ajax.forms.php index be185fc29..ea3e6222c 100644 --- a/include/ajax.forms.php +++ b/include/ajax.forms.php @@ -38,71 +38,26 @@ class DynamicFormsAjaxAPI extends AjaxController { } function getUserInfo($user_id) { - $user = User::lookup($user_id); - $data = $user->ht; - $data['email'] = $user->default_email->address; - - $custom = array(); - foreach ($user->getDynamicData() as $cd) { - $cd->addMissingFields(); - foreach ($cd->getFields() as $f) { - if ($f->get('name') == 'name') - $f->value = $user->getFullName(); - elseif ($f->get('name') == 'email') - $f->value = $user->getEmail(); - } - $custom[] = $cd->getForm(); - } + if (!($user = User::lookup($user_id))) + Http::response(404, 'Unknown user'); + $custom = $user->getForms(); include(STAFFINC_DIR . 'templates/user-info.tmpl.php'); } function saveUserInfo($user_id) { - $user = User::lookup($user_id); - $custom_data = $user->getDynamicData(); - $custom = array(); - $valid = true; - foreach ($custom_data as $cd) { - $cd->addMissingFields(); - $cf = $custom[] = $cd->getForm(); - $valid &= $cd->isValid(); - } + $errors = array(); + if (!($user = User::lookup($user_id))) + Http::response(404, 'Unknown user'); - if ($valid) { - foreach ($custom_data as $cd) - foreach ($cd->getFields() as $f) - if ($f->get('name') == 'email') - $email = $f; - $u = User::lookup(array('emails__address'=>$email->getClean())); - if ($u && $u->id != $user_id) { - $valid = false; - $email->addError('Email is assigned to another user'); - } - } + if ($user->updateInfo($_POST, $errors)) + return Http::response(201, $user->to_json()); - if (!$valid) { - include(STAFFINC_DIR . 'templates/user-info.tmpl.php'); - return; - } - - // Save custom data - foreach ($custom_data as $cd) { - foreach ($cd->getFields() as $f) { - if ($f->get('name') == 'name') { - $user->name = $f->getClean(); - $user->save(); - } - elseif ($f->get('name') == 'email') { - $user->default_email->address = $f->getClean(); - $user->default_email->save(); - } - } - $cd->save(); - } - - return Http::response(201, $user->to_json()); + $custom = $user->getForms($_POST); + include(STAFFINC_DIR . 'templates/user-info.tmpl.php'); + return; } } diff --git a/include/class.user.php b/include/class.user.php index 269e202ca..215117bff 100644 --- a/include/class.user.php +++ b/include/class.user.php @@ -88,14 +88,8 @@ class User extends UserModel { )); $user->save(true); $user->emails->add($user->default_email); - // Attach initial custom fields - $uf = UserForm::getInstance(); - foreach ($uf->getFields() as $f) - if (isset($data[$f->get('name')])) - $uf->setAnswer($f->get('name'), $data[$f->get('name')]); - $uf->setClientId($user->id); - $uf->save(); + $user->addDynamicData($data); } return $user; @@ -142,6 +136,18 @@ class User extends UserModel { return $a; } + function addDynamicData($data) { + + $uf = UserForm::getInstance(); + $uf->setClientId($this->id); + foreach ($uf->getFields() as $f) + if (isset($data[$f->get('name')])) + $uf->setAnswer($f->get('name'), $data[$f->get('name')]); + $uf->save(); + + return $uf; + } + function getDynamicData() { if (!isset($this->_entries)) { $this->_entries = DynamicFormEntry::forClient($this->id)->all(); @@ -154,6 +160,57 @@ class User extends UserModel { return $this->_entries; } + function updateInfo($source, &$errors) { + + //Get forms and validate + $custom_data = $this->getDynamicData(); + $valid = true; + foreach ($custom_data as $cd) { + $cd->addMissingFields(); + $valid &= $cd->isValid(); + } + + if (!$valid) return false; + + // Save custom data + foreach ($custom_data as $cd) { + foreach ($cd->getFields() as $f) { + if ($f->get('name') == 'name') { + $this->name = $f->getClean(); + $this->save(); + } + elseif ($f->get('name') == 'email') { + $this->default_email->address = $f->getClean(); + $this->default_email->save(); + } + } + $cd->save(); + } + + return true; + } + + function getForms($data=null) { + + $forms = array(); + foreach ($this->getDynamicData() as $cd) { + $cd->addMissingFields(); + if ($data) + $cd->isValid(); + else { + foreach ($cd->getFields() as $f) { + if ($f->get('name') == 'name') + $f->value = $this->getFullName(); + elseif ($f->get('name') == 'email') + $f->value = $this->getEmail(); + } + } + $forms[] = $cd->getForm(); + } + + return $forms; + } + function save($refetch=false) { // Drop commas and reorganize the name without them $parts = array_map('trim', explode(',', $this->name)); @@ -352,3 +409,5 @@ class UserEmail extends UserEmailModel { return $email; } } + +?> -- GitLab