Skip to content
Snippets Groups Projects
Commit cade4520 authored by Peter Rotich's avatar Peter Rotich
Browse files

Unify user util routines

parent ad54dda1
Branches
Tags
No related merge requests found
...@@ -38,71 +38,26 @@ class DynamicFormsAjaxAPI extends AjaxController { ...@@ -38,71 +38,26 @@ class DynamicFormsAjaxAPI extends AjaxController {
} }
function getUserInfo($user_id) { function getUserInfo($user_id) {
$user = User::lookup($user_id);
$data = $user->ht; if (!($user = User::lookup($user_id)))
$data['email'] = $user->default_email->address; Http::response(404, 'Unknown user');
$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();
}
$custom = $user->getForms();
include(STAFFINC_DIR . 'templates/user-info.tmpl.php'); include(STAFFINC_DIR . 'templates/user-info.tmpl.php');
} }
function saveUserInfo($user_id) { function saveUserInfo($user_id) {
$user = User::lookup($user_id);
$custom_data = $user->getDynamicData(); $errors = array();
$custom = array(); if (!($user = User::lookup($user_id)))
$valid = true; Http::response(404, 'Unknown user');
foreach ($custom_data as $cd) {
$cd->addMissingFields();
$cf = $custom[] = $cd->getForm();
$valid &= $cd->isValid();
}
if ($valid) { if ($user->updateInfo($_POST, $errors))
foreach ($custom_data as $cd) return Http::response(201, $user->to_json());
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 (!$valid) { $custom = $user->getForms($_POST);
include(STAFFINC_DIR . 'templates/user-info.tmpl.php'); include(STAFFINC_DIR . 'templates/user-info.tmpl.php');
return; 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());
} }
} }
......
...@@ -88,14 +88,8 @@ class User extends UserModel { ...@@ -88,14 +88,8 @@ class User extends UserModel {
)); ));
$user->save(true); $user->save(true);
$user->emails->add($user->default_email); $user->emails->add($user->default_email);
// Attach initial custom fields // Attach initial custom fields
$uf = UserForm::getInstance(); $user->addDynamicData($data);
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();
} }
return $user; return $user;
...@@ -142,6 +136,18 @@ class User extends UserModel { ...@@ -142,6 +136,18 @@ class User extends UserModel {
return $a; 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() { function getDynamicData() {
if (!isset($this->_entries)) { if (!isset($this->_entries)) {
$this->_entries = DynamicFormEntry::forClient($this->id)->all(); $this->_entries = DynamicFormEntry::forClient($this->id)->all();
...@@ -154,6 +160,57 @@ class User extends UserModel { ...@@ -154,6 +160,57 @@ class User extends UserModel {
return $this->_entries; 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) { function save($refetch=false) {
// Drop commas and reorganize the name without them // Drop commas and reorganize the name without them
$parts = array_map('trim', explode(',', $this->name)); $parts = array_map('trim', explode(',', $this->name));
...@@ -352,3 +409,5 @@ class UserEmail extends UserEmailModel { ...@@ -352,3 +409,5 @@ class UserEmail extends UserEmailModel {
return $email; return $email;
} }
} }
?>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment