developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Ticket #455: trunk.455.diff

File trunk.455.diff, 4.6 KB (added by laurentj, 14 years ago)

the patch for the trunk

  • testapp/modules/jelix_tests/tests/jdao.main_api.html.php

     
    172172    </object>
    173173</array>';
    174174        $this->assertComplexIdenticalStr($list, $verif);
    175 
    176 
    177 
    178175    }
    179176
    180177
     
    317314</array>';
    318315        $this->assertComplexIdenticalStr($list, $verif);
    319316    }
     317
     318    function testCheck() {
     319
     320        $record = jDao::createRecord('products');
     321        $check = $record->check();
     322        $results = array('name'=>array(jDaoRecordBase::ERROR_REQUIRED));
     323        $this->assertEqual($results,$check);
     324
     325        $record->name = 'Foo';
     326        $check = $record->check();
     327        $this->assertFalse($check);
     328
     329        $record->create_date = 'foo';
     330        $check = $record->check();
     331        $results = array('create_date'=>array(jDaoRecordBase::ERROR_BAD_FORMAT));
     332        $this->assertEqual($results,$check);
     333
     334        $record->create_date = '2008-02-15';
     335        $check = $record->check();
     336        $results = array('create_date'=>array(jDaoRecordBase::ERROR_BAD_FORMAT));
     337        $this->assertEqual($results,$check);
     338
     339        $record->create_date = '2008-02-15 12:03:34';
     340        $check = $record->check();
     341        $this->assertFalse($check);
     342
     343        $record->price='foo';
     344        $check = $record->check();
     345        $results = array('price'=>array(jDaoRecordBase::ERROR_BAD_TYPE));
     346        $this->assertEqual($results,$check);
     347
     348        $record->price=56;
     349        $check = $record->check();
     350        $this->assertFalse($check);
     351
     352    }
    320353}
    321354?>
     355 Pas de fin de ligne à la fin du fichier
  • lib/jelix/dao/jDaoRecordBase.class.php

     
    3838
    3939    /**
    4040     * check values in the properties of the record, according on the dao definition
    41      * @return array list of errors
     41     * @return array|false list of errors or false if ok
    4242     */
    4343    public function check(){
    4444        $errors=array();
     
    5151                continue;
    5252            }
    5353
    54             if($infos['datatype']=='varchar' || $infos['datatype']=='string'){
     54            switch($infos['datatype']) {
     55              case 'varchar':
     56              case 'string' :
    5557                if(!is_string($value) && $value !== null){
    5658                    $errors[$prop][] = self::ERROR_BAD_TYPE;
    57                     continue;
     59                    break;
    5860                }
    5961                // test regexp
    6062                if ($infos['regExp'] !== null && preg_match ($infos['regExp'], $value) === 0){
    6163                    $errors[$prop][] = self::ERROR_BAD_FORMAT;
    62                     continue;
     64                    break;
    6365                }
    6466
    6567                //  test maxlength et minlength
     
    7173                if($infos['minlength'] !== null && $len < intval($infos['minlength'])){
    7274                    $errors[$prop][] = self::ERROR_MINLENGTH;
    7375                }
    74 
    75             }elseif( in_array($infos['datatype'], array('int','integer','numeric', 'double', 'float'))) {
    76                 // test datatype
     76                break;
     77            case 'int';
     78            case 'integer':
     79            case 'numeric':
     80            case 'double':
     81            case 'float':
    7782                if($value !== null && !is_numeric($value)){
    7883                    $errors[$prop][] = self::ERROR_BAD_TYPE;
    79                     continue;
    8084                }
    81             }elseif( in_array($infos['datatype'], array('datetime', 'time','varchardate', 'date'))) {
    82                 if (jLocale::timestampToDate ($value) === false){
     85                break;
     86            case 'datetime':
     87                if(!preg_match('/^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})?$/', $value))
    8388                    $errors[$prop][] = self::ERROR_BAD_FORMAT;
    84                     continue;
    85                 }
     89                break;
     90            case 'time':
     91                if(!preg_match('/^(\d{2}:\d{2}:\d{2})?$/', $value))
     92                    $errors[$prop][] = self::ERROR_BAD_FORMAT;
     93                break;
     94            case 'varchardate':
     95            case 'date':
     96                if(!preg_match('/^(\d{4}-\d{2}-\d{2})?$/', $value))
     97                    $errors[$prop][] = self::ERROR_BAD_FORMAT;
     98                break;
    8699            }
    87100        }
    88         return $errors;
     101        return (count($errors)?$errors:false);
    89102    }
    90103
    91104    /**