Changeset 530

Show
Ignore:
Timestamp:
08/08/07 22:52:22 (1 year ago)
Author:
laurentj
Message:

ticket #195: support of localedate localedatetime localetime datatype in jforms

Files:

Legend:

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

    r526 r530  
    9191                        break; 
    9292                    case 'datetime' :  
    93                         var t = (val.match(/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/) != -1) 
     93                        var t = val.match(/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/); 
     94                        if(t == null){ ok=false; break; } 
    9495                        var yy = parseInt(t[1]); 
    9596                        var mm = parseInt(t[2]) -1; 
     
    99100                        var ts = parseInt(t[6]); 
    100101                        var dt = new Date(yy,mm,dd,th,tn,ts); 
    101                         if(yy != dt.getFullYear() || mm != dt.getMonth() || dt != dd.getDate() || th != dt.getHours() || tm != dt.getMinutes() || ts != dt.getSeconds()) 
     102                        if(yy != dt.getFullYear() || mm != dt.getMonth() || dd != dt.getDate() || th != dt.getHours() || tm != dt.getMinutes() || ts != dt.getSeconds()) 
    102103                            ok = false; 
    103104                        else 
     
    105106                        break; 
    106107                    case 'date' : 
    107                         var t = (val.match(/^(\d{4})\-(\d{2})\-(\d{2})$/) != -1) 
     108                        var t = val.match(/^(\d{4})\-(\d{2})\-(\d{2})$/); 
     109                        if(t == null){ ok=false; break; } 
    108110                        var yy = parseInt(t[1]); 
    109111                        var mm = parseInt(t[2]) -1; 
    110112                        var dd = parseInt(t[3]); 
    111113                        var dt = new Date(yy,mm,dd,0,0,0); 
    112                         if(yy != dt.getFullYear() || mm != dt.getMonth() || dt != dd.getDate()) 
    113                             ok = false; 
    114                         else 
    115                             ok = true; 
    116                         break; 
     114                        if(yy != dt.getFullYear() || mm != dt.getMonth() || dd != dt.getDate()) 
     115                            ok = false; 
     116                        else 
     117                            ok = true; 
     118                        break; 
     119                    case 'localetime' : 
    117120                    case 'time' : 
    118                         var t = (val.match(/^(\d{2}):(\d{2}):(\d{2})$/) != -1) 
     121                        var t = val.match(/^(\d{2}):(\d{2}):(\d{2})$/); 
     122                        if(t == null){ ok=false; break; } 
    119123                        var th = parseInt(t[4]); 
    120124                        var tm = parseInt(t[5]); 
     
    126130                            ok = true; 
    127131                        break; 
    128                     /*case 'localedatetime' : 
    129                         ok = (val.search(/^$/) != -1) 
     132                    case 'localedatetime' : 
     133                        var yy, mm, dd, th, tm, ts; 
     134                        if(c.lang.indexOf('fr_') == 0) { 
     135                            var t = val.match(/^(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2}):(\d{2})$/); 
     136                            if(t == null){ ok=false; break; } 
     137                            yy = parseInt(t[3]); 
     138                            mm = parseInt(t[2]) -1; 
     139                            dd = parseInt(t[1]); 
     140                            th = parseInt(t[4]); 
     141                            tm = parseInt(t[5]); 
     142                            ts = parseInt(t[6]); 
     143                        }else{ 
     144                            //default is en_* format 
     145                            var t = val.match(/^(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2}):(\d{2})$/); 
     146                            if(t == null){ ok=false; break; } 
     147                            yy = parseInt(t[3]); 
     148                            mm = parseInt(t[1]) -1; 
     149                            dd = parseInt(t[2]); 
     150                            th = parseInt(t[4]); 
     151                            tm = parseInt(t[5]); 
     152                            ts = parseInt(t[6]); 
     153                        } 
     154                        var dt = new Date(yy,mm,dd,th,tn,ts); 
     155                        if(yy != dt.getFullYear() || mm != dt.getMonth() || dd != dt.getDate() || th != dt.getHours() || tm != dt.getMinutes() || ts != dt.getSeconds()) 
     156                            ok = false; 
     157                        else 
     158                            ok = true; 
    130159                        break; 
    131160                    case 'localedate' : 
    132                         ok = (val.search(/^$/) != -1) 
    133                         break; 
    134                     case 'localetime' : 
    135                         ok = (val.search(/^$/) != -1) 
    136                         break; 
    137                     case 'url' : 
     161                        var yy, mm, dd; 
     162                        if(c.lang.indexOf('fr_') == 0) { 
     163                            var t = val.match(/^(\d{2})\/(\d{2})\/(\d{4})$/); 
     164                            if(t == null){ ok=false; break; } 
     165                            yy = parseInt(t[3]); 
     166                            mm = parseInt(t[2]) -1; 
     167                            dd = parseInt(t[1]); 
     168                        }else{ 
     169                            //default is en_* format 
     170                            var t = val.match(/^(\d{2})\/(\d{2})\/(\d{4})$/); 
     171                            if(t == null){ ok=false; break; } 
     172                            yy = parseInt(t[3]); 
     173                            mm = parseInt(t[1]) -1; 
     174                            dd = parseInt(t[2]); 
     175                        } 
     176                        var dt = new Date(yy,mm,dd,0,0,0); 
     177                        if(yy != dt.getFullYear() || mm != dt.getMonth() || dd != dt.getDate()) 
     178                            ok = false; 
     179                        else 
     180                            ok = true; 
     181                        break; 
     182                    /*case 'url' : 
    138183                        ok = (val.search(/^$/) != -1) 
    139184                        break;*/ 
     
    252297} 
    253298 
    254  
    255  
    256  
    257299/* 
    258300 informations sur un control 
  • trunk/lib/jelix-www/js/jforms.js

    r526 r530  
    9191                        break; 
    9292                    case 'datetime' :  
    93                         var t = (val.match(/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/) != -1) 
     93                        var t = val.match(/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/); 
     94                        if(t == null){ ok=false; break; } 
    9495                        var yy = parseInt(t[1]); 
    9596                        var mm = parseInt(t[2]) -1; 
     
    99100                        var ts = parseInt(t[6]); 
    100101                        var dt = new Date(yy,mm,dd,th,tn,ts); 
    101                         if(yy != dt.getFullYear() || mm != dt.getMonth() || dt != dd.getDate() || th != dt.getHours() || tm != dt.getMinutes() || ts != dt.getSeconds()) 
     102                        if(yy != dt.getFullYear() || mm != dt.getMonth() || dd != dt.getDate() || th != dt.getHours() || tm != dt.getMinutes() || ts != dt.getSeconds()) 
    102103                            ok = false; 
    103104                        else 
     
    105106                        break; 
    106107                    case 'date' : 
    107                         var t = (val.match(/^(\d{4})\-(\d{2})\-(\d{2})$/) != -1) 
     108                        var t = val.match(/^(\d{4})\-(\d{2})\-(\d{2})$/); 
     109                        if(t == null){ ok=false; break; } 
    108110                        var yy = parseInt(t[1]); 
    109111                        var mm = parseInt(t[2]) -1; 
    110112                        var dd = parseInt(t[3]); 
    111113                        var dt = new Date(yy,mm,dd,0,0,0); 
    112                         if(yy != dt.getFullYear() || mm != dt.getMonth() || dt != dd.getDate()) 
    113                             ok = false; 
    114                         else 
    115                             ok = true; 
    116                         break; 
     114                        if(yy != dt.getFullYear() || mm != dt.getMonth() || dd != dt.getDate()) 
     115                            ok = false; 
     116                        else 
     117                            ok = true; 
     118                        break; 
     119                    case 'localetime' : 
    117120                    case 'time' : 
    118                         var t = (val.match(/^(\d{2}):(\d{2}):(\d{2})$/) != -1) 
     121                        var t = val.match(/^(\d{2}):(\d{2}):(\d{2})$/); 
     122                        if(t == null){ ok=false; break; } 
    119123                        var th = parseInt(t[4]); 
    120124                        var tm = parseInt(t[5]); 
     
    126130                            ok = true; 
    127131                        break; 
    128                     /*case 'localedatetime' : 
    129                         ok = (val.search(/^$/) != -1) 
     132                    case 'localedatetime' : 
     133                        var yy, mm, dd, th, tm, ts; 
     134                        if(c.lang.indexOf('fr_') == 0) { 
     135                            var t = val.match(/^(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2}):(\d{2})$/); 
     136                            if(t == null){ ok=false; break; } 
     137                            yy = parseInt(t[3]); 
     138                            mm = parseInt(t[2]) -1; 
     139                            dd = parseInt(t[1]); 
     140                            th = parseInt(t[4]); 
     141                            tm = parseInt(t[5]); 
     142                            ts = parseInt(t[6]); 
     143                        }else{ 
     144                            //default is en_* format 
     145                            var t = val.match(/^(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2}):(\d{2})$/); 
     146                            if(t == null){ ok=false; break; } 
     147                            yy = parseInt(t[3]); 
     148                            mm = parseInt(t[1]) -1; 
     149                            dd = parseInt(t[2]); 
     150                            th = parseInt(t[4]); 
     151                            tm = parseInt(t[5]); 
     152                            ts = parseInt(t[6]); 
     153                        } 
     154                        var dt = new Date(yy,mm,dd,th,tn,ts); 
     155                        if(yy != dt.getFullYear() || mm != dt.getMonth() || dd != dt.getDate() || th != dt.getHours() || tm != dt.getMinutes() || ts != dt.getSeconds()) 
     156                            ok = false; 
     157                        else 
     158                            ok = true; 
    130159                        break; 
    131160                    case 'localedate' : 
    132                         ok = (val.search(/^$/) != -1) 
    133                         break; 
    134                     case 'localetime' : 
    135                         ok = (val.search(/^$/) != -1) 
    136                         break; 
    137                     case 'url' : 
     161                        var yy, mm, dd; 
     162                        if(c.lang.indexOf('fr_') == 0) { 
     163                            var t = val.match(/^(\d{2})\/(\d{2})\/(\d{4})$/); 
     164                            if(t == null){ ok=false; break; } 
     165                            yy = parseInt(t[3]); 
     166                            mm = parseInt(t[2]) -1; 
     167                            dd = parseInt(t[1]); 
     168                        }else{ 
     169                            //default is en_* format 
     170                            var t = val.match(/^(\d{2})\/(\d{2})\/(\d{4})$/); 
     171                            if(t == null){ ok=false; break; } 
     172                            yy = parseInt(t[3]); 
     173                            mm = parseInt(t[1]) -1; 
     174                            dd = parseInt(t[2]); 
     175                        } 
     176                        var dt = new Date(yy,mm,dd,0,0,0); 
     177                        if(yy != dt.getFullYear() || mm != dt.getMonth() || dd != dt.getDate()) 
     178                            ok = false; 
     179                        else 
     180                            ok = true; 
     181                        break; 
     182                    /*case 'url' : 
    138183                        ok = (val.search(/^$/) != -1) 
    139184                        break;*/ 
     
    252297} 
    253298 
    254  
    255  
    256  
    257299/* 
    258300 informations sur un control 
  • trunk/lib/jelix/forms/jFormsBase.class.php

    r527 r530  
    139139        if(!$daorec) 
    140140            return new Exception('formId is invalid, couldn\'t get the corresponding dao object'); 
     141 
     142        $prop = $daorec->getProperties(); 
    141143        foreach($this->_controls as $name=>$ctrl){ 
    142             if(isset($daorec->$name)) 
    143                 $this->_container->datas[$name] = $daorec->$name; 
     144            if(isset($prop[$name])) { 
     145                if($ctrl->datatype instanceof jDatatypeLocaleDateTime && $prop[$name]['datatype'] == 'datetime') { 
     146                    $dt = new jDateTime(); 
     147                    $dt->setFromString($daorec->$name, jDateTime::DB_DTFORMAT); 
     148                    $this->_container->datas[$name] = $dt->toString(jDateTime::LANG_DTFORMAT); 
     149                }elseif($ctrl->datatype instanceof jDatatypeLocaleDate && $prop[$name]['datatype'] == 'date') { 
     150                    $dt = new jDateTime(); 
     151                    $dt->setFromString($daorec->$name, jDateTime::DB_DFORMAT); 
     152                    $this->_container->datas[$name] = $dt->toString(jDateTime::LANG_DFORMAT); 
     153                }else{ 
     154                    $this->_container->datas[$name] = $daorec->$name; 
     155                } 
     156            } 
    144157        } 
    145158    } 
     
    155168        $dao = jDao::create($daoSelector); 
    156169        $daorec = jDao::createRecord($daoSelector); 
     170        $prop = $daorec->getProperties(); 
    157171        foreach($this->_controls as $name=>$ctrl){ 
    158172            if(is_array($this->_container->datas[$name])){ 
     
    162176                    // do nothing for arrays ? 
    163177                } 
    164             }else 
     178            }else{ 
    165179                $daorec->$name = $this->_container->datas[$name]; 
     180            } 
     181 
     182            if($ctrl->datatype instanceof jDatatypeLocaleDateTime && $prop[$name]['datatype'] == 'datetime') { 
     183                $dt = new jDateTime(); 
     184                $dt->setFromString($daorec->$name, jDateTime::LANG_DTFORMAT); 
     185                $daorec->$name = $dt->toString(jDateTime::DB_DTFORMAT); 
     186            }elseif($ctrl->datatype instanceof jDatatypeLocaleDate && $prop[$name]['datatype'] == 'date') { 
     187                $dt = new jDateTime(); 
     188                $dt->setFromString($daorec->$name, jDateTime::LANG_DFORMAT); 
     189                $daorec->$name = $dt->toString(jDateTime::DB_DFORMAT); 
     190            } 
    166191        } 
    167192        if($this->_container->formId){ 
  • trunk/lib/jelix/forms/jFormsBase.class.php

    r527 r530  
    139139        if(!$daorec) 
    140140            return new Exception('formId is invalid, couldn\'t get the corresponding dao object'); 
     141 
     142        $prop = $daorec->getProperties(); 
    141143        foreach($this->_controls as $name=>$ctrl){ 
    142             if(isset($daorec->$name)) 
    143                 $this->_container->datas[$name] = $daorec->$name; 
     144            if(isset($prop[$name])) { 
     145                if($ctrl->datatype instanceof jDatatypeLocaleDateTime && $prop[$name]['datatype'] == 'datetime') { 
     146                    $dt = new jDateTime(); 
     147                    $dt->setFromString($daorec->$name, jDateTime::DB_DTFORMAT); 
     148                    $this->_container->datas[$name] = $dt->toString(jDateTime::LANG_DTFORMAT); 
     149                }elseif($ctrl->datatype instanceof jDatatypeLocaleDate && $prop[$name]['datatype'] == 'date') { 
     150                    $dt = new jDateTime(); 
     151                    $dt->setFromString($daorec->$name, jDateTime::DB_DFORMAT); 
     152                    $this->_container->datas[$name] = $dt->toString(jDateTime::LANG_DFORMAT); 
     153                }else{ 
     154                    $this->_container->datas[$name] = $daorec->$name; 
     155                } 
     156            } 
    144157        } 
    145158    } 
     
    155168        $dao = jDao::create($daoSelector); 
    156169        $daorec = jDao::createRecord($daoSelector); 
     170        $prop = $daorec->getProperties(); 
    157171        foreach($this->_controls as $name=>$ctrl){ 
    158172            if(is_array($this->_container->datas[$name])){ 
     
    162176                    // do nothing for arrays ? 
    163177                } 
    164             }else 
     178            }else{ 
    165179                $daorec->$name = $this->_container->datas[$name]; 
     180            } 
     181 
     182            if($ctrl->datatype instanceof jDatatypeLocaleDateTime && $prop[$name]['datatype'] == 'datetime') { 
     183                $dt = new jDateTime(); 
     184                $dt->setFromString($daorec->$name, jDateTime::LANG_DTFORMAT); 
     185                $daorec->$name = $dt->toString(jDateTime::DB_DTFORMAT); 
     186            }elseif($ctrl->datatype instanceof jDatatypeLocaleDate && $prop[$name]['datatype'] == 'date') { 
     187                $dt = new jDateTime(); 
     188                $dt->setFromString($daorec->$name, jDateTime::LANG_DFORMAT); 
     189                $daorec->$name = $dt->toString(jDateTime::DB_DFORMAT); 
     190            } 
    166191        } 
    167192        if($this->_container->formId){ 
  • trunk/lib/jelix/forms/jFormsCompiler.class.php

    r527 r530  
    318318            $source[]='$js.="gControl = new jFormsControl(\''.(string)$control['ref'].'\', \'".$label."\', \''.$dt.'\');\n";'; 
    319319 
     320        if($dt == 'localedate' || $dt =='localedatetime' || $dt =='localetime'){ 
     321            $source[]='$js.="gControl.lang=\'".$GLOBALS[\'gJConfig\']->defaultLocale."\';\n";'; 
     322        } 
     323 
    320324        if(isset($control['readonly']) && 'true' == (string)$control['readonly']){ 
    321325            $source[]='$js.="gControl.readonly = true;\n";'; 
  • trunk/lib/jelix/forms/jFormsCompiler.class.php

    r527 r530  
    318318            $source[]='$js.="gControl = new jFormsControl(\''.(string)$control['ref'].'\', \'".$label."\', \''.$dt.'\');\n";'; 
    319319 
     320        if($dt == 'localedate' || $dt =='localedatetime' || $dt =='localetime'){ 
     321            $source[]='$js.="gControl.lang=\'".$GLOBALS[\'gJConfig\']->defaultLocale."\';\n";'; 
     322        } 
     323 
    320324        if(isset($control['readonly']) && 'true' == (string)$control['readonly']){ 
    321325            $source[]='$js.="gControl.readonly = true;\n";'; 
  • trunk/lib/jelix/plugins/tpl/html/block.formcontrols.php

    r528 r530  
    4444            } 
    4545            else { 
    46                 $t->_privateVars[\'__form\'] = '.$param[0].';  
     46                $t->_privateVars[\'__form\'] = '.$param[0].'; 
     47                $ctrls_to_display=null; 
    4748            }'; 
    4849        } 
  • trunk/lib/jelix/plugins/tpl/html/block.formcontrols.php

    r528 r530  
    4444            } 
    4545            else { 
    46                 $t->_privateVars[\'__form\'] = '.$param[0].';  
     46                $t->_privateVars[\'__form\'] = '.$param[0].'; 
     47                $ctrls_to_display=null; 
    4748            }'; 
    4849        } 
  • trunk/testapp/modules/jelix_tests/tests/jforms.compiler.html.php

    r527 r530  
    61961919=>'$label = str_replace("\'","\\\'",\'Votre nom\'); 
    620620$js.="gControl = new jFormsControl(\'nom\', \'".$label."\', \'localedatetime\');\n"; 
     621$js.="gControl.lang=\'".$GLOBALS[\'gJConfig\']->defaultLocale."\';\n"; 
    621622$js.="gControl.errRequired=\'".str_replace("\'","\\\'",jLocale::get(\'jelix~formserr.js.err.required\',$label))."\';\n"; 
    622623$js.="gControl.errInvalid =\'".str_replace("\'","\\\'",jLocale::get(\'jelix~formserr.js.err.invalid\', $label))."\';\n"; 
     
    62462520=>'$label = str_replace("\'","\\\'",\'Votre nom\'); 
    625626$js.="gControl = new jFormsControl(\'nom\', \'".$label."\', \'localedate\');\n"; 
     627$js.="gControl.lang=\'".$GLOBALS[\'gJConfig\']->defaultLocale."\';\n"; 
    626628$js.="gControl.errRequired=\'".str_replace("\'","\\\'",jLocale::get(\'jelix~formserr.js.err.required\',$label))."\';\n"; 
    627629$js.="gControl.errInvalid =\'".str_replace("\'","\\\'",jLocale::get(\'jelix~formserr.js.err.invalid\', $label))."\';\n"; 
     
    62963121=>'$label = str_replace("\'","\\\'",\'Votre nom\'); 
    630632$js.="gControl = new jFormsControl(\'nom\', \'".$label."\', \'localetime\');\n"; 
     633$js.="gControl.lang=\'".$GLOBALS[\'gJConfig\']->defaultLocale."\';\n"; 
    631634$js.="gControl.errRequired=\'".str_replace("\'","\\\'",jLocale::get(\'jelix~formserr.js.err.required\',$label))."\';\n"; 
    632635$js.="gControl.errInvalid =\'".str_replace("\'","\\\'",jLocale::get(\'jelix~formserr.js.err.invalid\', $label))."\';\n"; 
  • trunk/testapp/modules/jelix_tests/tests/jforms.compiler.html.php

    r527 r530  
    61961919=>'$label = str_replace("\'","\\\'",\'Votre nom\'); 
    620620$js.="gControl = new jFormsControl(\'nom\', \'".$label."\', \'localedatetime\');\n"; 
     621$js.="gControl.lang=\'".$GLOBALS[\'gJConfig\']->defaultLocale."\';\n"; 
    621622$js.="gControl.errRequired=\'".str_replace("\'","\\\'",jLocale::get(\'jelix~formserr.js.err.required\',$label))."\';\n"; 
    622623$js.="gControl.errInvalid =\'".str_replace("\'","\\\'",jLocale::get(\'jelix~formserr.js.err.invalid\', $label))."\';\n"; 
     
    62462520=>'$label = str_replace("\'","\\\'",\'Votre nom\'); 
    625626$js.="gControl = new jFormsControl(\'nom\', \'".$label."\', \'localedate\');\n"; 
     627$js.="gControl.lang=\'".$GLOBALS[\'gJConfig\']->defaultLocale."\';\n"; 
    626628$js.="gControl.errRequired=\'".str_replace("\'","\\\'",jLocale::get(\'jelix~formserr.js.err.required\',$label))."\';\n"; 
    627629$js.="gControl.errInvalid =\'".str_replace("\'","\\\'",jLocale::get(\'jelix~formserr.js.err.invalid\', $label))."\';\n"; 
     
    62963121=>'$label = str_replace("\'","\\\'",\'Votre nom\'); 
    630632$js.="gControl = new jFormsControl(\'nom\', \'".$label."\', \'localetime\');\n"; 
     633$js.="gControl.lang=\'".$GLOBALS[\'gJConfig\']->defaultLocale."\';\n"; 
    631634$js.="gControl.errRequired=\'".str_replace("\'","\\\'",jLocale::get(\'jelix~formserr.js.err.required\',$label))."\';\n"; 
    632635$js.="gControl.errInvalid =\'".str_replace("\'","\\\'",jLocale::get(\'jelix~formserr.js.err.invalid\', $label))."\';\n"; 
  • trunk/testapp/modules/testapp/forms/sample.form.xml

    r526 r530  
    3838  </listbox> 
    3939 
    40  
    4140   <checkboxes ref="objets" required="true"> 
    4241      <label>Vous avez </label> 
     
    4746  </checkboxes> 
    4847 
     48  <input ref="datenaissance" type="localedate"> 
     49      <label>Votre date de naissance</label> 
     50      <help>Le format de la date est jj/mm/aaaa</help> 
     51  </input> 
     52 
    4953</forms> 
  • trunk/testapp/modules/testapp/forms/sample.form.xml

    r526 r530  
    3838  </listbox> 
    3939 
    40  
    4140   <checkboxes ref="objets" required="true"> 
    4241      <label>Vous avez </label> 
     
    4746  </checkboxes> 
    4847 
     48  <input ref="datenaissance" type="localedate"> 
     49      <label>Votre date de naissance</label> 
     50      <help>Le format de la date est jj/mm/aaaa</help> 
     51  </input> 
     52 
    4953</forms> 
Download in other formats: Unified Diff Zip Archive