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

Documentation generated on Thu, 22 Mar 2012 22:15:00 +0100 by phpDocumentor 1.4.3