From 3a467d811bd3528580bf8f7b1c305aad4cb6d72d Mon Sep 17 00:00:00 2001
From: Peter Rotich <peter@enhancesoft.com>
Date: Sat, 23 Nov 2013 19:34:51 +0000
Subject: [PATCH] Add field lookup by name

---
 include/ajax.forms.php          | 52 ++++++++++++++++-----------------
 include/class.dynamic_forms.php | 24 +++++++++++----
 2 files changed, 44 insertions(+), 32 deletions(-)

diff --git a/include/ajax.forms.php b/include/ajax.forms.php
index be185fc29..5765c7286 100644
--- a/include/ajax.forms.php
+++ b/include/ajax.forms.php
@@ -61,6 +61,7 @@ class DynamicFormsAjaxAPI extends AjaxController {
     function saveUserInfo($user_id) {
         $user = User::lookup($user_id);
 
+        //TODO: Move save user logic to user class.
         $custom_data = $user->getDynamicData();
         $custom = array();
         $valid = true;
@@ -71,38 +72,35 @@ class DynamicFormsAjaxAPI extends AjaxController {
         }
 
         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 (!$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();
+            // Make sure email is uniqueue
+            foreach ($custom_data as $cd) {
+                if (($f=$cd->getField('email'))
+                        && ($u=User::lookup(array('emails__address'=>$f->getClean())))
+                        && $u->id != $user_id) {
+                    $valid = false;
+                    $f->addError('Email is assigned to another user');
                 }
-                elseif ($f->get('name') == 'email') {
-                    $user->default_email->address = $f->getClean();
-                    $user->default_email->save();
+            }
+            // Save custom data
+            if ($valid) {
+                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());
             }
-            $cd->save();
         }
 
-        return Http::response(201, $user->to_json());
+        include(STAFFINC_DIR . 'templates/user-info.tmpl.php');
+        return;
     }
 }
 
diff --git a/include/class.dynamic_forms.php b/include/class.dynamic_forms.php
index f49d819ba..945d188f1 100644
--- a/include/class.dynamic_forms.php
+++ b/include/class.dynamic_forms.php
@@ -67,12 +67,17 @@ class DynamicForm extends VerySimpleModel {
         return call_user_func_array($delegate, $args);
     }
 
-    function hasField($name) {
+    function getField($name) {
         foreach ($this->getDynamicFields() as $f)
-            if ($f->get('name') == $name)
-                return true;
+            if (!strcasecmp($f->get('name'), $name))
+                return $f;
     }
 
+    function hasField($name) {
+        return ($this->getField($name));
+    }
+
+
     function getTitle() { return $this->get('title'); }
     function getInstructions() { return $this->get('instructions'); }
 
@@ -404,6 +409,15 @@ class DynamicFormEntry extends VerySimpleModel {
         return $this->_fields;
     }
 
+    function getField($name) {
+
+        foreach ($this->getFields() as $field)
+            if (!strcasecmp($field->get('name'), $name))
+                return $field;
+
+        return null;
+    }
+
     /**
      * Validate the form and indicate if there no errors.
      *
@@ -453,8 +467,8 @@ class DynamicFormEntry extends VerySimpleModel {
         $this->object_id = $user_id;
     }
 
-    function render($staff=true) {
-        return $this->getForm()->render($staff);
+    function render($staff=true, $title=false) {
+        return $this->getForm()->render($staff, $title);
     }
 
     /**
-- 
GitLab