Refactoring in UploadFile.class.php to simplify things.
[timetracker.git] / WEB-INF / lib / form / Form.class.php
index f8a32ec..1f77414 100644 (file)
 // | https://www.anuko.com/time_tracker/credits.htm
 // +----------------------------------------------------------------------+
 
-// +----------------------------------------------------------------------+
-// |
-// | Class generates elements of specification HTML 4.01
-// | http://www.w3.org/TR/1999/REC-html401-19991224
-// |
-// +----------------------------------------------------------------------+
-
+// Form class is a container for HTML forms we use in the application.
+// It contains an array of $elements - which are individual input controls
+// belonging to a form.
 class Form {
+  var $name = '';          // Form name.
+  var $elements = array(); // An array of input controls in form.
 
-  var $name = '';
-  var $elements = array();
-
-  function __construct($formName) {
-    $this->name = $formName;
+  function __construct($name) {
+    $this->name = $name;
   }
 
   function getElement($name) {
@@ -53,113 +48,116 @@ class Form {
   function getName() { return $this->name; }
 
   // addInput - adds an input object to the form.
-  function addInput($arguments) {
-    switch($arguments['type']) {
+  function addInput($params) {
+    switch($params['type']) {
       case 'text':
         import('form.TextField');
-        $el = new TextField($arguments['name']);
-        $el->setMaxLength(@$arguments['maxlength']);
-        if (isset($arguments['aspassword'])) $el->setAsPassword($arguments['aspassword']);
+        $el = new TextField($params['name']);
+        if (isset($params['maxlength'])) $el->setMaxLength($params['maxlength']);
+        break;
+
+      case 'password':
+        import('form.PasswordField');
+        $el = new PasswordField($params['name']);
+        if (isset($params['maxlength'])) $el->setMaxLength($params['maxlength']);
+        break;
+
+      case 'datefield':
+        import('form.DateField');
+        $el = new DateField($params['name']);
+        $el->setMaxLength('10');
+        break;
+
+      case 'floatfield':
+        import('form.FloatField');
+        $el = new FloatField($params['name']);
+        if (isset($params['format'])) $el->setFormat($params['format']);
+        break;
+
+      case 'textarea':
+        import('form.TextArea');
+        $el = new TextArea($params['name']);
+        if (isset($params['maxlength'])) $el->setMaxLength($params['maxlength']);
+        break;
+
+      case 'checkbox':
+        import('form.Checkbox');
+        $el = new Checkbox($params['name']);
+        break;
+
+      case 'hidden':
+        import('form.Hidden');
+        $el = new Hidden($params['name']);
+        break;
+
+      case 'submit':
+        import('form.Submit');
+        $el = new Submit($params['name']);
+        break;
+
+      case 'upload':
+        import('form.UploadFile');
+        $el = new UploadFile($params['name']);
+        if (isset($params['maxsize'])) $el->setMaxSize($params['maxsize']);
         break;
 
 // TODO: refactoring ongoing down from here.
-// aspassword - change this name to something better? Perhaps.
-// Change $arguments to something better too (maybe). $args or $params?
-                       case "datefield":
-                           import('form.DateField');
-                           $el = new DateField($arguments["name"]);
-                               $el->setMaxLength("10");
-                           break;
-                           
-                       case "floatfield":
-                           import('form.FloatField');
-                           $el = new FloatField($arguments["name"]);
-                           if (isset($arguments["format"])) $el->setFormat($arguments["format"]);
-                           break;
-                           
-                       case "textarea":
-                           import('form.TextArea');
-                           $el = new TextArea($arguments["name"]);
-                           $el->setColumns(@$arguments["cols"]);
-                           $el->setRows(@$arguments["rows"]);
-                           if (isset($arguments["maxlength"])) $el->setMaxLength($arguments["maxlength"]);
-                           break;
-                           
-                       case "checkbox":
-                           import('form.Checkbox');
-                           $el = new Checkbox($arguments["name"]);
-                           if (@$arguments["checked"]) $el->setChecked(true);
-                           $el->setData(@$arguments["data"]);
-                           break;
-                           
                        case "checkboxgroup":
                            import('form.CheckboxGroup');
-                           $el = new CheckboxGroup($arguments["name"]);
-                           if (isset($arguments["layout"])) $el->setLayout($arguments["layout"]);
-                           if (isset($arguments["groupin"])) $el->setGroupIn($arguments["groupin"]);
-                           if (isset($arguments["datakeys"])) $el->setDataKeys($arguments["datakeys"]);
-                           $el->setData(@$arguments["data"]);
+                           $el = new CheckboxGroup($params["name"]);
+                           if (isset($params["layout"])) $el->setLayout($params["layout"]);
+                           if (isset($params["groupin"])) $el->setGroupIn($params["groupin"]);
+                           if (isset($params["datakeys"])) $el->setDataKeys($params["datakeys"]);
+                           $el->setData(@$params["data"]);
                            break;
                            
                        case "combobox":
                            import('form.Combobox');
-                           $el = new Combobox($arguments["name"]);
-                           $el->setData(@$arguments["data"]);
-                           $el->setDataDefault(@$arguments["empty"]);
-                           if (isset($arguments["datakeys"])) $el->setDataKeys($arguments["datakeys"]);
-                           break;
-                           
-                       case "hidden":
-                           import('form.Hidden');
-                           $el = new Hidden($arguments["name"]);
-                           break;
-                        
-                       case "submit":
-                           import('form.Submit');
-                           $el = new Submit($arguments["name"]);
+                           $el = new Combobox($params["name"]);
+                           $el->setData(@$params["data"]);
+                           $el->setDataDefault(@$params["empty"]);
+                            if (isset($params["multiple"])) {
+                              $el->setMultiple($params["multiple"]);
+                              $el->name .= '[]'; // Add brackets to the end of name to get back an array on POST.
+                            }
+                           if (isset($params["datakeys"])) $el->setDataKeys($params["datakeys"]);
                            break;
-                           
+
                        case "calendar":
                            import('form.Calendar');
-                           $el = new Calendar($arguments["name"]);
-                           $el->setHighlight(@$arguments["highlight"]);
+                           $el = new Calendar($params["name"]);
+                           $el->setHighlight(@$params["highlight"]);
                            break;  
                            
                        case "table":
                            import('form.Table');
-                           $el = new Table($arguments["name"]);
-                           $el->setData(@$arguments["data"]);
-                           $el->setWidth(@$arguments["width"]);
-                           break;
-                           
-                       case "upload":
-                           import('form.UploadFile');
-                           $el = new UploadFile($arguments["name"]);
-                           if (isset($arguments["maxsize"])) $el->setMaxSize($arguments["maxsize"]);
+                           $el = new Table($params["name"]);
+                           $el->setData(@$params["data"]);
+                           $el->setWidth(@$params["width"]);
                            break;
                }
                if ($el!=null) {
                        $el->setFormName($this->name);
-                       if (isset($arguments["id"])) $el->setId($arguments["id"]);
-                       if (isset($GLOBALS["I18N"])) $el->localize($GLOBALS["I18N"]);
-                       if (isset($arguments["enable"])) $el->setEnabled($arguments["enable"]);
+                       if (isset($params["id"])) $el->setId($params["id"]);
+                       $el->localize();
+                       if (isset($params["enable"])) $el->setEnabled($params["enable"]);
                        
-                       if (isset($arguments["style"])) $el->setStyle($arguments["style"]);
-                       if (isset($arguments["size"])) $el->setSize($arguments["size"]);
+                       if (isset($params["style"])) $el->setStyle($params["style"]);
+                       if (isset($params["size"])) $el->setSize($params["size"]);
                        
-                       if (isset($arguments["label"])) $el->setLabel($arguments["label"]);
-                       if (isset($arguments["value"])) $el->setValue($arguments["value"]);
+                       if (isset($params["label"])) $el->setLabel($params["label"]);
+                       if (isset($params["value"])) $el->setValue($params["value"]);
                        
-                       if (isset($arguments["onchange"])) $el->setOnChange($arguments["onchange"]);
-                       if (isset($arguments["onclick"])) $el->setOnClick($arguments["onclick"]);
+                       if (isset($params["onchange"])) $el->setOnChange($params["onchange"]);
+                       if (isset($params["onclick"])) $el->setOnClick($params["onclick"]);
                        
-                       $this->elements[$arguments["name"]] = &$el;
+                       $this->elements[$params["name"]] = &$el;
                }
        }
        
        function addInputElement(&$el) {
                if ($el && is_object($el)) {
-                       if (isset($GLOBALS["I18N"])) $el->localize($GLOBALS["I18N"]);
+                       $el->localize();
                
                        $el->setFormName($this->name);
                        $this->elements[$el->name] = &$el;