Changeset 432

Show
Ignore:
Timestamp:
05/02/07 18:07:15 (2 years ago)
Author:
laurentj
Message:

worked on jforms : move errors data from jformsBase object to jFormsDataContainer, so errors message are accessible from data session;

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/experimental/jforms/lib/jelix-www/js/jforms.js

    r374 r432  
    1313usage : 
    1414 
    15  
    16 gForm = new jFormsForm('name'); 
    17 gForm.setDecorator(new jFormsErrorDecoratorAlert()); 
    18  
     15gForm = new jFormsForm('name');                         // create a form descriptor 
     16gForm.setDecorator(new jFormsErrorDecoratorAlert());    // declare an error handler 
     17 
     18    // declare a form control 
    1919gControl = new jFormsControl('name', 'a label', 'datatype'); 
    2020gControl.required = true; 
     
    2323gForm.addControl( gControl); 
    2424... 
     25 
     26    // declare the form now 
    2527jForms.declareForm(gForm); 
    2628 
    27  
     29On a form tag : 
    2830onsubmit="return jForms.verifyForm(this)" 
    2931 
    30  
    31 */ 
    32  
    33  
    34  
    35 var gForm, gFormControl; 
     32*/ 
     33 
    3634 
    3735/* 
     
    4240 
    4341    declareForm : function(aForm){ 
    44         var name = 'jformthis._forms.length 
    4542        this._forms[aForm.name]=aForm; 
    46  
    4743    }, 
    4844 
     
    5854        for(var i =0; i < f.controls.length; i++){ 
    5955            var c = f.controls[i]; 
    60             var val = frmElt.elements[c.name]
     56            var val = this._getValue(frmElt.elements[c.name])
    6157            if(val == ''){ 
    6258                if(c.required){ 
     
    7369                        ok = (val == 'true' || val == 'false'); 
    7470                        break; 
    75                     case 'decimal' :  
     71                    case 'decimal' : 
     72                         var t = parseFloat(val); 
     73                        if(isNaN(t)){ 
     74                            ok = false; 
     75                        }else{ 
     76                            ok = ( t.toString() == val); 
     77                        } 
    7678                        break; 
    7779                    case 'integer' : 
    78                         //ok = val.regexp  
     80                        var t = parseInt(val); 
     81                        if(isNaN(t)){ 
     82                            ok = false; 
     83                        }else{ 
     84                            ok = ( t.toString() == val); 
     85                        } 
    7986                        break; 
    8087                    case 'hexadecimal' :  
     88                        ok = (val.search(/^0x[a-f0-9A-F]+$/) != -1) 
    8189                        break; 
    8290                    case 'datetime' :  
    83                         break; 
    84                     case 'date' :  
    85                         break; 
    86                     case 'time' :  
    87                         break; 
    88                     case 'localedatetime' :  
    89                         break; 
    90                     case 'localedate' :  
    91                         break; 
    92                     case 'localetime' :  
    93                         break; 
    94                     case 'url' :  
    95                         break; 
    96                     case 'email' :  
    97                         break; 
    98                     case 'ipv4' :  
    99                         break; 
    100                     case 'ipv6' :  
     91                        var t = (val.match(/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/) != -1) 
     92                        var yy = parseInt(t[1]); 
     93                        var mm = parseInt(t[2]) -1; 
     94                        var dd = parseInt(t[3]); 
     95                        var th = parseInt(t[4]); 
     96                        var tm = parseInt(t[5]); 
     97                        var ts = parseInt(t[6]); 
     98                        var dt = new Date(yy,mm,dd,th,tn,ts); 
     99                        if(yy != dt.getFullYear() || mm != dt.getMonth() || dt != dd.getDate() || th != dt.getHours() || tm != dt.getMinutes() || ts != dt.getSeconds()) 
     100                            ok = false; 
     101                        else 
     102                            ok = true; 
     103                        break; 
     104                    case 'date' : 
     105                        var t = (val.match(/^(\d{4})\-(\d{2})\-(\d{2})$/) != -1) 
     106                        var yy = parseInt(t[1]); 
     107                        var mm = parseInt(t[2]) -1; 
     108                        var dd = parseInt(t[3]); 
     109                        var dt = new Date(yy,mm,dd,0,0,0); 
     110                        if(yy != dt.getFullYear() || mm != dt.getMonth() || dt != dd.getDate()) 
     111                            ok = false; 
     112                        else 
     113                            ok = true; 
     114                        break; 
     115                    case 'time' : 
     116                        var t = (val.match(/^(\d{2}):(\d{2}):(\d{2})$/) != -1) 
     117                        var th = parseInt(t[4]); 
     118                        var tm = parseInt(t[5]); 
     119                        var ts = parseInt(t[6]); 
     120                        var dt = new Date(2007,05,02,th,tn,ts); 
     121                        if(th != dt.getHours() || tm != dt.getMinutes() || ts != dt.getSeconds()) 
     122                            ok = false; 
     123                        else 
     124                            ok = true; 
     125                        break; 
     126                    /*case 'localedatetime' : 
     127                        ok = (val.search(/^$/) != -1) 
     128                        break; 
     129                    case 'localedate' : 
     130                        ok = (val.search(/^$/) != -1) 
     131                        break; 
     132                    case 'localetime' : 
     133                        ok = (val.search(/^$/) != -1) 
     134                        break; 
     135                    case 'url' : 
     136                        ok = (val.search(/^$/) != -1) 
     137                        break;*/ 
     138                    case 'email' : 
     139                        ok = (val.search(/^[A-Z0-9][A-Z0-9_\-]*(\.[A-Z0-9][A-Z0-9_\-]*)*@[A-Z0-9][A-Z0-9_\-]*(\.[A-Z0-9][A-Z0-9_\-]+)$/i) != -1) 
     140                        break; 
     141                    case 'ipv4' : 
     142                         var t = val.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/); 
     143                         if(t) 
     144                            ok = (t[1] > 255 || t[2] > 255 || t[3] > 255 || t[4] > 255) 
     145                         else 
     146                            ok = false; 
     147                        break; 
     148                    case 'ipv6' : 
     149                        ok = (val.search(/^([a-f0-9]{1,4})(:([a-f0-9]{1,4})){7}$/i) != -1) 
    101150                        break; 
    102151                } 
     
    105154                    valid = false; 
    106155                } 
    107                  
    108156            } 
    109157        } 
     
    111159            f.decorator.end(); 
    112160        return valid; 
     161    }, 
     162 
     163 
     164    _getValue : function (elt){ 
     165        var value=''; 
     166        switch (elt.localName) { 
     167            case "input": 
     168                switch (elt.type) { 
     169                    case "text": 
     170                    case "password": 
     171                    case "hidden": 
     172                        value = elt.value; 
     173                        break; 
     174                    case "checkbox": 
     175                    case "radio": 
     176                        if (elt.checked) 
     177                            value = 'true'; 
     178                        else 
     179                            value = 'false'; 
     180                        break; 
     181                } 
     182                break; 
     183 
     184            case "textarea": 
     185                value= elt.value; 
     186                break; 
     187            case "select": 
     188                if (!elt.multiple) { 
     189                    value =  elt.value; 
     190                    break; 
     191                } 
     192                var options = elt.getElementsByTagName("option"); 
     193                value = []; 
     194                for (i = 0; i < options.length; i++) { 
     195                    if (options[i].selected) { 
     196                        value.push(options[i].value); 
     197                    } 
     198                } 
     199                break; 
     200        } 
     201        return value; 
    113202    } 
     203 
    114204} 
    115205 
     
    155245    this.message = ''; 
    156246} 
     247 
    157248jFormsErrorDecoratorAlert.prototype = { 
    158249    start : function(){ 
     
    162253        if(messageType == 1){ 
    163254            this.message  += control.errRequired + "\n"; 
     255        }else if(messageType == 2){ 
     256            this.message  += control.errInvalid + "\n"; 
    164257        }else{ 
    165             this.message  += control.errInvalid + "\n"; 
    166         } 
    167     }, 
    168  
     258            this.message  += "Error on '"+control.label+"' field\n"; 
     259        } 
     260    }, 
    169261    end : function(){ 
    170262        if(this.message != ''){ 
  • branches/experimental/jforms/lib/jelix/forms/jForms.class.php

    r335 r432  
    55* @author      Laurent Jouanneau 
    66* @contributor 
    7 * @copyright   2006 Laurent Jouanneau 
     7* @copyright   2006-2007 Laurent Jouanneau 
    88* @link        http://www.jelix.org 
    99* @licence     http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public Licence, see LICENCE file 
     
    1818require_once(JELIX_LIB_FORMS_PATH.'jFormsBase.class.php'); 
    1919require_once(JELIX_LIB_FORMS_PATH.'jFormsControl.class.php'); 
     20require_once(JELIX_LIB_FORMS_PATH.'jFormsDatasource.class.php'); 
    2021require_once(JELIX_LIB_UTILS_PATH.'jDatatype.class.php'); 
    2122 
  • branches/experimental/jforms/lib/jelix/forms/jFormsBase.class.php

    r374 r432  
    4444     */ 
    4545    protected $_readOnly = false; 
    46  
    47     /** 
    48      * list of errors 
    49      * @var array 
    50      */ 
    51     protected $_errors = array(); 
    5246     
    5347    /** 
     
    7064            $value = $req->getParam($name); 
    7165            //if($value !== null) on commente pour le moment, 
    72             //@todo revoir un meilleur test, pour les formulaires sur plusieurs pages 
     66            //@todo à prevoir un meilleur test, pour les formulaires sur plusieurs pages 
    7367            $this->_container->datas[$name]= $value; 
    7468        } 
     
    9286     */ 
    9387    public function check(){ 
    94         $this->_errors = array(); 
     88        $this->_container->errors = array(); 
    9589        foreach($this->_controls as $name=>$ctrl){ 
    9690            $value=$this->_container->datas[$name]; 
    9791            if($value === null && $ctrl->required){ 
    98                 $this->_errors[$name]=JFORM_ERRDATA_REQUIRED; 
    99             }elseif($ctrl->datatype->check($value)){ 
    100                 $this->_errors[$name]=JFORM_ERRDATA_VALID; 
     92                $this->_container->errors[$name]=JFORM_ERRDATA_REQUIRED; 
     93            }elseif(!$ctrl->datatype->check($value)){ 
     94                $this->_container->errors[$name]=JFORM_ERRDATA_INVALID; 
    10195            } 
    10296        } 
    103         return count($this->errors) == 0; 
     97        return count($this->_container->errors) == 0; 
    10498    } 
    10599 
     
    143137     */ 
    144138    public function setReadOnly($r = true){  $this->_readOnly = $r;  } 
    145      
     139 
    146140    /** 
    147141     * return list of errors found during the check 
     
    149143     * @see jFormsBase::check 
    150144     */ 
    151     public function getErrors(){  return $this->_errors;  } 
     145    public function getErrors(){  return $this->_container->errors;  } 
     146 
     147    /** 
     148     * set an error message on a specific field 
     149     * @param string $field the field name 
     150     * @param string $mesg  the error message string  
     151     */ 
     152    public function setErrorOn($field, $mesg){ 
     153        $this->_container->errors[$field]=$mesg; 
     154    } 
    152155 
    153156    /** 
  • branches/experimental/jforms/lib/jelix/forms/jFormsCompiler.class.php

    r374 r432  
    188188 
    189189 
    190         /* on g�re en php, du php qui g�re du javascript !  oui oui :-D 
     190        /* on génére en php, du php qui génère du javascript !  oui oui :-D 
    191191     
    192         au final, le javascript g�r�ans la page html doit ressembler �ela 
     192        au final, le javascript généré dans la page html doit ressembler à cela 
    193193 
    194194        gForm = new jFormsForm('name'); 
     
    207207 
    208208 
    209         // le code php g�r�ans le builder 
     209        // le code php généré dans le builder 
    210210 
    211211        $js="gForm = new jFormsForm('".$this->getFormName()."');\n"; 
     
    236236        $js.="jForms.declareForm(gForm);\n"; 
    237237 
    238         // le code php qui gre le php 
     238        // le code php qui génère le php 
    239239 
    240240 
     
    255255 
    256256   // on indique un objet form 
    257    // il renvoi dans un tableau le code g�r�orrespondant 
     257   // il renvoi dans un tableau le code généré correspondant 
    258258   /* 
    259    startform : code g�r�our le debut du formulaire (balise <form> en html) Peut contenir %ATTR% 
    260    head : code g�r� ajouter dans l'en-t� de page 
    261    controls : tableau assoc de chaque contr�g�r�Peuvent contenir %ATTR% 
    262    endform : code g�r�our la fin du formulaire 
    263  
    264  
    265    %ATTR% : remplac�par les attributs suppl�ntaires indiqu�par l'utilisateur dans le template 
     259   startform : code généré pour le debut du formulaire (balise <form> en html) Peut contenir %ATTR% 
     260   head : code généré à ajouter dans l'en-tête de page 
     261   controls : tableau assoc de chaque contrôle généré. Peuvent contenir %ATTR% 
     262   endform : code généré pour la fin du formulaire 
     263 
     264 
     265   %ATTR% : remplacés par les attributs supplémentaires indiqués par l'utilisateur dans le template 
    266266   */ 
    267267   function buildForm($formObject); 
  • branches/experimental/jforms/lib/jelix/forms/jFormsControl.class.php

    r324 r432  
    55* @author      Laurent Jouanneau 
    66* @contributor 
    7 * @copyright   2006 Laurent Jouanneau 
     7* @copyright   2006-2007 Laurent Jouanneau 
    88* @link        http://www.jelix.org 
    99* @licence     http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public Licence, see LICENCE file 
     
    2727   public $value=''; 
    2828   public $defaultValue=''; 
    29 //  public $pattern =null; 
    3029 
    3130   function __construct($ref){ 
  • branches/experimental/jforms/lib/jelix/forms/jFormsDataContainer.class.php

    r324 r432  
    55* @author      Laurent Jouanneau 
    66* @contributor 
    7 * @copyright   2006 Laurent Jouanneau 
     7* @copyright   2006-2007 Laurent Jouanneau 
    88* @link        http://www.jelix.org 
    99* @licence     http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public Licence, see LICENCE file 
     
    3333 
    3434    /** 
     35     * list of errors detected in datas 
     36     * @var array 
     37     */ 
     38    public $errors = array(); 
     39 
     40    /** 
    3541     * 
    3642     * @param jSelectorForm $formSelector 
     
    4753     
    4854    function clear(){ 
    49         $this->datas=array(); 
     55        $this->datas = array(); 
     56        $this->errors = array(); 
    5057    } 
    5158 
Download in other formats: Unified Diff Zip Archive