Changeset 661

Show
Ignore:
Timestamp:
11/27/07 23:14:35 (1 year ago)
Author:
laurentj
Message:

enhancement #142 : added boolean datatype in jDao

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/jelix-scripts/commands/createdao.cmd.php

    r640 r661  
    123123                  $type='time'; 
    124124                  break; 
     125               case 'bool': 
     126               case 'boolean': 
     127                  $type='boolean'; 
     128                  break; 
    125129               default: 
    126130                  $type=''; 
  • trunk/lib/jelix-scripts/commands/createdao.cmd.php

    r640 r661  
    123123                  $type='time'; 
    124124                  break; 
     125               case 'bool': 
     126               case 'boolean': 
     127                  $type='boolean'; 
     128                  break; 
    125129               default: 
    126130                  $type=''; 
  • trunk/lib/jelix-scripts/commands/createform.cmd.php

    r650 r661  
    126126                    $tag='textarea'; 
    127127                    break; 
     128                case 'boolean': 
     129                    $tag='checkbox'; 
     130                    break; 
    128131            } 
    129132            if($datatype != '') 
  • trunk/lib/jelix-scripts/commands/createform.cmd.php

    r650 r661  
    126126                    $tag='textarea'; 
    127127                    break; 
     128                case 'boolean': 
     129                    $tag='checkbox'; 
     130                    break; 
    128131            } 
    129132            if($datatype != '') 
  • trunk/lib/jelix/dao/jDaoFactoryBase.class.php

    r654 r661  
    7878    protected $_deleteByAfterEvent = false; 
    7979 
     80    protected $trueValue = 1; 
     81    protected $falseValue = 0; 
    8082    /** 
    8183     * @param jDbConnection $conn the database connection 
     
    414416                } 
    415417                break; 
     418            case 'boolean': 
     419                if($value === null) 
     420                   $value = 'NULL'; 
     421                elseif ($value === true|| strtolower($value)=='true'|| $value =='1') 
     422                    $value =  $this->trueValue; 
     423                else 
     424                    $value =  $this->falseValue; 
     425                break; 
    416426            default: 
    417427                $value = $this->_conn->quote ($value); 
  • trunk/lib/jelix/dao/jDaoFactoryBase.class.php

    r654 r661  
    7878    protected $_deleteByAfterEvent = false; 
    7979 
     80    protected $trueValue = 1; 
     81    protected $falseValue = 0; 
    8082    /** 
    8183     * @param jDbConnection $conn the database connection 
     
    414416                } 
    415417                break; 
     418            case 'boolean': 
     419                if($value === null) 
     420                   $value = 'NULL'; 
     421                elseif ($value === true|| strtolower($value)=='true'|| $value =='1') 
     422                    $value =  $this->trueValue; 
     423                else 
     424                    $value =  $this->falseValue; 
     425                break; 
    416426            default: 
    417427                $value = $this->_conn->quote ($value); 
  • trunk/lib/jelix/dao/jDaoGenerator.class.php

    r660 r661  
    5050   protected $aliasWord = ' AS '; 
    5151 
     52   protected $trueValue = 1; 
     53   protected $falseValue = 0; 
     54 
    5255   /** 
    5356   * constructor 
     
    115118      $src[] = '   protected $_DaoRecordClassName=\''.$this->_DaoRecordClassName.'\';'; 
    116119      $src[] = '   protected $_daoSelector = \''.jDaoCompiler::$daoId.'\';'; 
     120 
     121      if($this->trueValue != 1){ 
     122         $src[]='   protected $trueValue ='.var_export($this->trueValue,true).';'; 
     123         $src[]='   protected $falseValue ='.var_export($this->falseValue,true).';'; 
     124      }  
    117125 
    118126      if($this->_datasParser->hasEvent('deletebefore') || $this->_datasParser->hasEvent('delete')) 
     
    827835                return intval($value); 
    828836            break; 
     837         case 'boolean': 
     838            return $this->getBooleanValue($value); 
     839            break; 
    829840         default: 
    830841            if(strpos($value,"'") !== false){ 
     
    879890            $expr=$forCondition.'(is_numeric ('.$expr.') ? '.$expr.' : intval('.$expr.'))'; 
    880891            break; 
     892         case 'boolean': 
     893            if($checknull){ 
     894               $expr= '('.$expr.' === null ? \''.$opnull.'NULL\' : '.$forCondition.'('.$expr.'?\''.$this->trueValue.'\':\''.$this->falseValue.'\'))'; 
     895            }else{ 
     896               $expr= $forCondition.'('.$expr.'?\''.$this->trueValue.'\':\''.$this->falseValue.'\')'; 
     897            } 
     898            break; 
    881899         default: 
    882900            if($checknull){ 
     
    896914        return '       $record->'.$pkai->name.'= $this->_conn->lastInsertId();'; 
    897915    } 
     916     
     917    protected function getBooleanValue($value){ 
     918        return (strtolower($value)=='true'|| $value =='1'|| $value=='t'?$this->trueValue:$this->falseValue); 
     919    }  
     920       
    898921 
    899922} 
  • trunk/lib/jelix/dao/jDaoGenerator.class.php

    r660 r661  
    5050   protected $aliasWord = ' AS '; 
    5151 
     52   protected $trueValue = 1; 
     53   protected $falseValue = 0; 
     54 
    5255   /** 
    5356   * constructor 
     
    115118      $src[] = '   protected $_DaoRecordClassName=\''.$this->_DaoRecordClassName.'\';'; 
    116119      $src[] = '   protected $_daoSelector = \''.jDaoCompiler::$daoId.'\';'; 
     120 
     121      if($this->trueValue != 1){ 
     122         $src[]='   protected $trueValue ='.var_export($this->trueValue,true).';'; 
     123         $src[]='   protected $falseValue ='.var_export($this->falseValue,true).';'; 
     124      }  
    117125 
    118126      if($this->_datasParser->hasEvent('deletebefore') || $this->_datasParser->hasEvent('delete')) 
     
    827835                return intval($value); 
    828836            break; 
     837         case 'boolean': 
     838            return $this->getBooleanValue($value); 
     839            break; 
    829840         default: 
    830841            if(strpos($value,"'") !== false){ 
     
    879890            $expr=$forCondition.'(is_numeric ('.$expr.') ? '.$expr.' : intval('.$expr.'))'; 
    880891            break; 
     892         case 'boolean': 
     893            if($checknull){ 
     894               $expr= '('.$expr.' === null ? \''.$opnull.'NULL\' : '.$forCondition.'('.$expr.'?\''.$this->trueValue.'\':\''.$this->falseValue.'\'))'; 
     895            }else{ 
     896               $expr= $forCondition.'('.$expr.'?\''.$this->trueValue.'\':\''.$this->falseValue.'\')'; 
     897            } 
     898            break; 
    881899         default: 
    882900            if($checknull){ 
     
    896914        return '       $record->'.$pkai->name.'= $this->_conn->lastInsertId();'; 
    897915    } 
     916     
     917    protected function getBooleanValue($value){ 
     918        return (strtolower($value)=='true'|| $value =='1'|| $value=='t'?$this->trueValue:$this->falseValue); 
     919    }  
     920       
    898921 
    899922} 
  • trunk/lib/jelix/dao/jDaoProperty.class.php

    r660 r661  
    8484    */ 
    8585    function __construct ($aParams, $def){ 
    86         $needed = array('name', 'fieldname', 'table', 'datatype', 'required', 'minlength', 
    87         'maxlength', 'regexp', 'sequence', 'default'); 
     86        $needed = array('name', 'fieldname', 'table', 'datatype', 'required', 
     87                        'minlength', 'maxlength', 'regexp', 'sequence', 'default'); 
    8888 
    8989        $params = $def->getAttr($aParams, $needed); 
     
    118118        $params['datatype']=trim(strtolower($params['datatype'])); 
    119119 
    120         if (!in_array ($params['datatype'], array ('autoincrement', 'bigautoincrement', 'int', 'datetime', 'time', 
    121                                     'integer', 'varchar', 'string', 'text', 'varchardate', 'date', 'numeric', 'double', 'float'))){ 
    122            throw new jDaoXmlException ('wrong.attr', array($params['datatype'], $this->fieldName,'property')); 
     120        if (!in_array ($params['datatype'], 
     121                       array ('autoincrement', 'bigautoincrement', 'int', 
     122                              'datetime', 'time', 'integer', 'varchar', 'string', 
     123                              'text', 'varchardate', 'date', 'numeric', 'double', 
     124                              'float', 'boolean'))){ 
     125           throw new jDaoXmlException ('wrong.attr', array($params['datatype'], 
     126                                                           $this->fieldName, 
     127                                                           'property')); 
    123128        } 
    124129        $this->datatype = strtolower($params['datatype']); 
    125         $this->needsQuotes = in_array ($params['datatype'], array ('string', 'varchar', 'text', 'date', 'datetime', 'time')); 
     130        $this->needsQuotes = in_array ($params['datatype'], 
     131                array ('string', 'varchar', 'text', 'date', 'datetime', 'time')); 
    126132 
    127133        $this->isPK = in_array($this->fieldName, $tables[$this->table]['pk']); 
     
    151157              case 'float': 
    152158                $this->defaultValue = doubleval($params['default']); 
     159                break; 
     160              case 'boolean': 
     161                $v = $params['default']; 
     162                $this->defaultValue = ($v =='1'|| $v=='t'|| strtolower($v) =='true'); 
    153163                break; 
    154164              default: 
  • trunk/lib/jelix/dao/jDaoProperty.class.php

    r660 r661  
    8484    */ 
    8585    function __construct ($aParams, $def){ 
    86         $needed = array('name', 'fieldname', 'table', 'datatype', 'required', 'minlength', 
    87         'maxlength', 'regexp', 'sequence', 'default'); 
     86        $needed = array('name', 'fieldname', 'table', 'datatype', 'required', 
     87                        'minlength', 'maxlength', 'regexp', 'sequence', 'default'); 
    8888 
    8989        $params = $def->getAttr($aParams, $needed); 
     
    118118        $params['datatype']=trim(strtolower($params['datatype'])); 
    119119 
    120         if (!in_array ($params['datatype'], array ('autoincrement', 'bigautoincrement', 'int', 'datetime', 'time', 
    121                                     'integer', 'varchar', 'string', 'text', 'varchardate', 'date', 'numeric', 'double', 'float'))){ 
    122            throw new jDaoXmlException ('wrong.attr', array($params['datatype'], $this->fieldName,'property')); 
     120        if (!in_array ($params['datatype'], 
     121                       array ('autoincrement', 'bigautoincrement', 'int', 
     122                              'datetime', 'time', 'integer', 'varchar', 'string', 
     123                              'text', 'varchardate', 'date', 'numeric', 'double', 
     124                              'float', 'boolean'))){ 
     125           throw new jDaoXmlException ('wrong.attr', array($params['datatype'], 
     126                                                           $this->fieldName, 
     127                                                           'property')); 
    123128        } 
    124129        $this->datatype = strtolower($params['datatype']); 
    125         $this->needsQuotes = in_array ($params['datatype'], array ('string', 'varchar', 'text', 'date', 'datetime', 'time')); 
     130        $this->needsQuotes = in_array ($params['datatype'], 
     131                array ('string', 'varchar', 'text', 'date', 'datetime', 'time')); 
    126132 
    127133        $this->isPK = in_array($this->fieldName, $tables[$this->table]['pk']); 
     
    151157              case 'float': 
    152158                $this->defaultValue = doubleval($params['default']); 
     159                break; 
     160              case 'boolean': 
     161                $v = $params['default']; 
     162                $this->defaultValue = ($v =='1'|| $v=='t'|| strtolower($v) =='true'); 
    153163                break; 
    154164              default: 
  • trunk/lib/jelix/forms/jFormsBase.class.php

    r660 r661  
    150150        $daorec = $dao->get($key); 
    151151        if(!$daorec) { 
    152             if(is_array($key)) $key = var_export($key,true); 
    153             throw new jExceptionForms('jelix~formserr.bad.formid.for.dao', array($daoSelector, $key, $this->_sel)); 
     152            if(is_array($key)) 
     153                $key = var_export($key,true); 
     154            throw new jExceptionForms('jelix~formserr.bad.formid.for.dao', 
     155                                      array($daoSelector, $key, $this->_sel)); 
    154156        } 
    155157 
     
    157159        foreach($this->_controls as $name=>$ctrl){ 
    158160            if(isset($prop[$name])) { 
    159                 if($ctrl->datatype instanceof jDatatypeLocaleDateTime && $prop[$name]['datatype'] == 'datetime') { 
     161                if($ctrl->datatype instanceof jDatatypeLocaleDateTime 
     162                   && $prop[$name]['datatype'] == 'datetime') { 
    160163                    if($daorec->$name != '') { 
    161164                        $dt = new jDateTime(); 
     
    165168                        $this->_container->datas[$name] =''; 
    166169                    } 
    167                 }elseif($ctrl->datatype instanceof jDatatypeLocaleDate && $prop[$name]['datatype'] == 'date') { 
     170                }elseif($ctrl->datatype instanceof jDatatypeLocaleDate 
     171                        && $prop[$name]['datatype'] == 'date') { 
    168172                    if($daorec->$name != '') { 
    169173                        $dt = new jDateTime(); 
     
    173177                        $this->_container->datas[$name] =''; 
    174178                    } 
     179                }elseif($ctrl->type=='checkbox' && $prop[$name]['datatype'] == 'boolean') { 
     180                    if($daorec->$name == 'TRUE'||  $daorec->$name == 't'|| $daorec->$name == '1'||$daorec->$name == true){ 
     181                        $this->_container->datas[$name] = $ctrl->valueOnCheck; 
     182                    }else { 
     183                        $this->_container->datas[$name] = $ctrl->valueOnUncheck; 
     184                    }  
    175185                }else{ 
    176186                    $this->_container->datas[$name] = $daorec->$name; 
     
    223233                $daorec->$name = null; 
    224234            }else if($daorec->$name == '' && $prop[$name]['defaultValue'] !== null  
    225                     && in_array($prop[$name]['datatype'], array('int','integer','double','float'))) { 
     235                    && in_array($prop[$name]['datatype'], 
     236                                array('int','integer','double','float'))) { 
    226237                $daorec->$name = $prop[$name]['defaultValue']; 
    227             }else if($ctrl->datatype instanceof jDatatypeLocaleDateTime && $prop[$name]['datatype'] == 'datetime') { 
     238                 
     239            }else if( $prop[$name]['datatype'] == 'boolean'){ 
     240                $daorec->$name = ($daorec->$name == '1'|| $daorec->$name == 'true' 
     241                                  || $daorec->$name == 't'); 
     242 
     243            }else if($ctrl->datatype instanceof jDatatypeLocaleDateTime 
     244                     && $prop[$name]['datatype'] == 'datetime') { 
    228245                $dt = new jDateTime(); 
    229246                $dt->setFromString($daorec->$name, jDateTime::LANG_DTFORMAT); 
    230247                $daorec->$name = $dt->toString(jDateTime::DB_DTFORMAT); 
    231             }elseif($ctrl->datatype instanceof jDatatypeLocaleDate && $prop[$name]['datatype'] == 'date') { 
     248                 
     249            }elseif($ctrl->datatype instanceof jDatatypeLocaleDate 
     250                    && $prop[$name]['datatype'] == 'date') { 
    232251                $dt = new jDateTime(); 
    233252                $dt->setFromString($daorec->$name, jDateTime::LANG_DFORMAT); 
  • trunk/lib/jelix/forms/jFormsBase.class.php

    r660 r661  
    150150        $daorec = $dao->get($key); 
    151151        if(!$daorec) { 
    152             if(is_array($key)) $key = var_export($key,true); 
    153             throw new jExceptionForms('jelix~formserr.bad.formid.for.dao', array($daoSelector, $key, $this->_sel)); 
     152            if(is_array($key)) 
     153                $key = var_export($key,true); 
     154            throw new jExceptionForms('jelix~formserr.bad.formid.for.dao', 
     155                                      array($daoSelector, $key, $this->_sel)); 
    154156        } 
    155157 
     
    157159        foreach($this->_controls as $name=>$ctrl){ 
    158160            if(isset($prop[$name])) { 
    159                 if($ctrl->datatype instanceof jDatatypeLocaleDateTime && $prop[$name]['datatype'] == 'datetime') { 
     161                if($ctrl->datatype instanceof jDatatypeLocaleDateTime 
     162                   && $prop[$name]['datatype'] == 'datetime') { 
    160163                    if($daorec->$name != '') { 
    161164                        $dt = new jDateTime(); 
     
    165168                        $this->_container->datas[$name] =''; 
    166169                    } 
    167                 }elseif($ctrl->datatype instanceof jDatatypeLocaleDate && $prop[$name]['datatype'] == 'date') { 
     170                }elseif($ctrl->datatype instanceof jDatatypeLocaleDate 
     171                        && $prop[$name]['datatype'] == 'date') { 
    168172                    if($daorec->$name != '') { 
    169173                        $dt = new jDateTime(); 
     
    173177                        $this->_container->datas[$name] =''; 
    174178                    } 
     179                }elseif($ctrl->type=='checkbox' && $prop[$name]['datatype'] == 'boolean') { 
     180                    if($daorec->$name == 'TRUE'||  $daorec->$name == 't'|| $daorec->$name == '1'||$daorec->$name == true){ 
     181                        $this->_container->datas[$name] = $ctrl->valueOnCheck; 
     182                    }else { 
     183                        $this->_container->datas[$name] = $ctrl->valueOnUncheck; 
     184                    }  
    175185                }else{ 
    176186                    $this->_container->datas[$name] = $daorec->$name; 
     
    223233                $daorec->$name = null; 
    224234            }else if($daorec->$name == '' && $prop[$name]['defaultValue'] !== null  
    225                     && in_array($prop[$name]['datatype'], array('int','integer','double','float'))) { 
     235                    && in_array($prop[$name]['datatype'], 
     236                                array('int','integer','double','float'))) { 
    226237                $daorec->$name = $prop[$name]['defaultValue']; 
    227             }else if($ctrl->datatype instanceof jDatatypeLocaleDateTime && $prop[$name]['datatype'] == 'datetime') { 
     238                 
     239            }else if( $prop[$name]['datatype'] == 'boolean'){ 
     240                $daorec->$name = ($daorec->$name == '1'|| $daorec->$name == 'true' 
     241                                  || $daorec->$name == 't'); 
     242 
     243            }else if($ctrl->datatype instanceof jDatatypeLocaleDateTime 
     244                     && $prop[$name]['datatype'] == 'datetime') { 
    228245                $dt = new jDateTime(); 
    229246                $dt->setFromString($daorec->$name, jDateTime::LANG_DTFORMAT); 
    230247                $daorec->$name = $dt->toString(jDateTime::DB_DTFORMAT); 
    231             }elseif($ctrl->datatype instanceof jDatatypeLocaleDate && $prop[$name]['datatype'] == 'date') { 
     248                 
     249            }elseif($ctrl->datatype instanceof jDatatypeLocaleDate 
     250                    && $prop[$name]['datatype'] == 'date') { 
    232251                $dt = new jDateTime(); 
    233252                $dt->setFromString($daorec->$name, jDateTime::LANG_DFORMAT); 
  • trunk/lib/jelix/plugins/db/pgsql/pgsql.daobuilder.php

    r631 r661  
    1818 
    1919    protected $propertiesListForInsert = 'PrimaryFieldsExcludeAutoIncrement'; 
    20  
     20     
     21    protected $trueValue = 'TRUE'; 
     22     
     23    protected $falseValue = 'FALSE'; 
     24     
    2125    function __construct($factoryClassName, $recordClassName, $daoDefinition){ 
    2226        parent::__construct($factoryClassName, $recordClassName, $daoDefinition); 
  • trunk/lib/jelix/plugins/db/pgsql/pgsql.daobuilder.php

    r631 r661  
    1818 
    1919    protected $propertiesListForInsert = 'PrimaryFieldsExcludeAutoIncrement'; 
    20  
     20     
     21    protected $trueValue = 'TRUE'; 
     22     
     23    protected $falseValue = 'FALSE'; 
     24     
    2125    function __construct($factoryClassName, $recordClassName, $daoDefinition){ 
    2226        parent::__construct($factoryClassName, $recordClassName, $daoDefinition); 
  • trunk/testapp/install/install.mysql.sql

    r639 r661  
    146146`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
    147147`name` VARCHAR( 150 ) NOT NULL , 
    148 `price` FLOAT   default '0' 
     148`price` FLOAT   default '0', 
     149`promo` BOOL NOT NULL  
    149150) TYPE = MYISAM ; 
    150151 
  • trunk/testapp/install/install.mysql.sql

    r639 r661  
    146146`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
    147147`name` VARCHAR( 150 ) NOT NULL , 
    148 `price` FLOAT   default '0' 
     148`price` FLOAT   default '0', 
     149`promo` BOOL NOT NULL  
    149150) TYPE = MYISAM ; 
    150151 
  • trunk/testapp/install/install.pgsql.sql

    r639 r661  
    66    id integer NOT NULL, 
    77    name character varying(150) NOT NULL, 
    8     price real DEFAULT 0 
     8    price real DEFAULT 0, 
     9    promo boolean NOT NULL 
    910); 
    1011 
  • trunk/testapp/install/install.pgsql.sql

    r639 r661  
    66    id integer NOT NULL, 
    77    name character varying(150) NOT NULL, 
    8     price real DEFAULT 0 
     8    price real DEFAULT 0, 
     9    promo boolean NOT NULL 
    910); 
    1011 
  • trunk/testapp/modules/testapp/daos/products.dao.xml

    r576 r661  
    88      <property name="name" fieldname="name" datatype="string"  required="true"/> 
    99      <property name="price" fieldname="price" datatype="float"/> 
     10      <property name="promo" fieldname="promo" datatype="boolean"/> 
    1011   </record> 
    1112</dao> 
  • trunk/testapp/modules/testapp/daos/products.dao.xml

    r576 r661  
    88      <property name="name" fieldname="name" datatype="string"  required="true"/> 
    99      <property name="price" fieldname="price" datatype="float"/> 
     10      <property name="promo" fieldname="promo" datatype="boolean"/> 
    1011   </record> 
    1112</dao> 
  • trunk/testapp/modules/testapp/forms/products.form.xml

    r641 r661  
    99      <label>Price</label> 
    1010   </input> 
     11   <checkbox ref="promo"> 
     12      <label>Promotion</label> 
     13   </checkbox> 
     14 
    1115 
    1216  <submit ref="valid"> 
  • trunk/testapp/modules/testapp/forms/products.form.xml

    r641 r661  
    99      <label>Price</label> 
    1010   </input> 
     11   <checkbox ref="promo"> 
     12      <label>Promotion</label> 
     13   </checkbox> 
     14 
    1115 
    1216  <submit ref="valid"> 
Download in other formats: Unified Diff Zip Archive