Source for file jDaoRecordBase.class.php

Documentation is available at jDaoRecordBase.class.php

  1. <?php
  2. /**
  3.  * @package     jelix
  4.  * @subpackage  dao
  5.  * @author      Laurent Jouanneau
  6.  * @contributor Loic Mathaud, Olivier Demah
  7.  * @copyright   2005-2007 Laurent Jouanneau
  8.  * @copyright   2007 Loic Mathaud
  9.  * @copyright   2010 Olivier Demah
  10.  * @link        http://www.jelix.org
  11.  * @licence     http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public Licence, see LICENCE file
  12.  */
  13.  
  14. /**
  15.  * Base class for all record classes generated by the dao compiler
  16.  * @package  jelix
  17.  * @subpackage dao
  18.  */
  19. abstract class jDaoRecordBase {
  20.  
  21.     const ERROR_REQUIRED=1;
  22.     const ERROR_BAD_TYPE=2;
  23.     const ERROR_BAD_FORMAT=3;
  24.     const ERROR_MAXLENGTH 4;
  25.     const ERROR_MINLENGTH 5;
  26.  
  27.     /**
  28.      * @return array informations on all properties
  29.      * @see jDaoFactoryBase::getProperties()
  30.      */
  31.     abstract public function getProperties();
  32.  
  33.     /**
  34.      * @return array list of properties name which contains primary keys
  35.      * @see jDaoFactoryBase::getPrimaryKeyNames()
  36.      * @since 1.0b3
  37.      */
  38.     abstract public function getPrimaryKeyNames();
  39.  
  40.     /**
  41.      * check values in the properties of the record, according on the dao definition
  42.      * @return array|falselist of errors or false if ok
  43.      */
  44.     public function check(){
  45.         $errors=array();
  46.         foreach($this->getProperties(as $prop=>$infos){
  47.             $value $this->$prop;
  48.  
  49.             // test required
  50.             if($infos['required'&& $value === null){
  51.                 $errors[$prop][self::ERROR_REQUIRED;
  52.                 continue;
  53.             }
  54.  
  55.             switch($infos['datatype']{
  56.               case 'varchar':
  57.               case 'string' :
  58.                 if(!is_string($value&& $value !== null){
  59.                     $errors[$prop][self::ERROR_BAD_TYPE;
  60.                     break;
  61.                 }
  62.                 // test regexp
  63.                 if ($infos['regExp'!== null && preg_match ($infos['regExp']$value=== 0){
  64.                     $errors[$prop][self::ERROR_BAD_FORMAT;
  65.                     break;
  66.                 }
  67.  
  68.                 //  test maxlength et minlength
  69.                 $len iconv_strlen($value$GLOBALS['gJConfig']->charset);
  70.                 if($infos['maxlength'!== null && $len intval($infos['maxlength'])){
  71.                     $errors[$prop][self::ERROR_MAXLENGTH;
  72.                 }
  73.  
  74.                 if($infos['minlength'!== null && $len intval($infos['minlength'])){
  75.                     $errors[$prop][self::ERROR_MINLENGTH;
  76.                 }
  77.                 break;
  78.             case 'int';
  79.             case 'integer':
  80.             case 'numeric':
  81.             case 'double':
  82.             case 'float':
  83.                 if($value !== null && !is_numeric($value)){
  84.                     $errors[$prop][self::ERROR_BAD_TYPE;
  85.                 }
  86.                 break;
  87.             case 'datetime':
  88.                 if(!preg_match('/^(\d{4}-(((0[1,3-9]|1[0-2])-([012][0-9]|3[01]))|((02-([01][0-9]|2[0-9])))) (([01][0-9])|(2[0-3])):[0-5][0-9]:[0-5][0-9])?$/',$value))
  89.                     $errors[$prop][self::ERROR_BAD_FORMAT;
  90.                 break;
  91.             case 'time':
  92.                 if(!preg_match('/^((([01][0-9])|(2[0-3])):[0-5][0-9]:[0-5][0-9])?$/',$value))
  93.                     $errors[$prop][self::ERROR_BAD_FORMAT;
  94.                 break;
  95.             case 'varchardate':
  96.             case 'date':
  97.                 if(!preg_match('/^(\d{4}-(((0[1,3-9]|1[0-2])-([012][0-9]|3[01]))|((02-([01][0-9]|2[0-9])))))?$/',$value))
  98.                     $errors[$prop][self::ERROR_BAD_FORMAT;
  99.                 break;
  100.             }
  101.         }
  102.         return (count($errors)?$errors:false);
  103.     }
  104.  
  105.     /**
  106.      * set values on the properties which correspond to the primary
  107.      * key of the record
  108.      * This method accept a single or many values as parameter
  109.      */
  110.     public function setPk(){
  111.         $args=func_get_args();
  112.         if(count($args)==&& is_array($args[0])){
  113.             $args=$args[0];
  114.         }
  115.         $pkf $this->getPrimaryKeyNames();
  116.  
  117.         if(count($args== || count($args!= count($pkf) ) 
  118.             throw new jException('jelix~dao.error.keys.missing');
  119.  
  120.         foreach($pkf as $k=>$prop){
  121.             $this->$prop $args[$k];
  122.         }
  123.         return true;
  124.     }
  125.  
  126.     /**
  127.      * return the value of fields corresponding to the primary key
  128.      * @return mixed  the value or an array of values if there is several  pk
  129.      * @since 1.0b3
  130.      */
  131.     public function getPk(){
  132.         $pkf $this->getPrimaryKeyNames();
  133.         if(count($pkf== 1){
  134.             return $this->{$pkf[0]};
  135.         }else{
  136.             $list array();
  137.             foreach($pkf as $k=>$prop){
  138.                 $list[$this->$prop;
  139.             }
  140.             return $list;
  141.         }
  142.     }
  143. }

Documentation generated on Mon, 19 Sep 2011 14:12:20 +0200 by phpDocumentor 1.4.3