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, Sid-Ali Djenadi
  7.  * @copyright   2005-2012 Laurent Jouanneau
  8.  * @copyright   2007 Loic Mathau, 2012 Sid-Ali Djenadid
  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 the dao selector
  29.      */
  30.     abstract public function getSelector();
  31.     
  32.     /**
  33.      * @return array informations on all properties
  34.      * @see jDaoFactoryBase::getProperties()
  35.      */
  36.     abstract public function getProperties();
  37.  
  38.     /**
  39.      * @return array list of properties name which contains primary keys
  40.      * @see jDaoFactoryBase::getPrimaryKeyNames()
  41.      * @since 1.0b3
  42.      */
  43.     abstract public function getPrimaryKeyNames();
  44.  
  45.     /**
  46.      * check values in the properties of the record, according on the dao definition
  47.      * @return array|falselist of errors or false if ok
  48.      */
  49.     public function check(){
  50.         $errors=array();
  51.         foreach($this->getProperties(as $prop=>$infos){
  52.             $value $this->$prop;
  53.  
  54.             // test required
  55.             if($infos['required'&& $value === null){
  56.                 $errors[$prop][self::ERROR_REQUIRED;
  57.                 continue;
  58.             }
  59.  
  60.             switch($infos['datatype']{
  61.               case 'varchar':
  62.               case 'string' :
  63.                 if(!is_string($value&& $value !== null){
  64.                     $errors[$prop][self::ERROR_BAD_TYPE;
  65.                     break;
  66.                 }
  67.                 // test regexp
  68.                 if ($infos['regExp'!== null && preg_match ($infos['regExp']$value=== 0){
  69.                     $errors[$prop][self::ERROR_BAD_FORMAT;
  70.                     break;
  71.                 }
  72.  
  73.                 //  test maxlength et minlength
  74.                 $len iconv_strlen($valuejApp::config()->charset);
  75.                 if($infos['maxlength'!== null && $len intval($infos['maxlength'])){
  76.                     $errors[$prop][self::ERROR_MAXLENGTH;
  77.                 }
  78.  
  79.                 if($infos['minlength'!== null && $len intval($infos['minlength'])){
  80.                     $errors[$prop][self::ERROR_MINLENGTH;
  81.                 }
  82.                 break;
  83.             case 'int';
  84.             case 'integer':
  85.             case 'numeric':
  86.             case 'double':
  87.             case 'float':
  88.                 if($value !== null && !is_numeric($value)){
  89.                     $errors[$prop][self::ERROR_BAD_TYPE;
  90.                 }
  91.                 break;
  92.             case 'datetime':
  93.                 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))
  94.                     $errors[$prop][self::ERROR_BAD_FORMAT;
  95.                 break;
  96.             case 'time':
  97.                 if(!preg_match('/^((([01][0-9])|(2[0-3])):[0-5][0-9]:[0-5][0-9])?$/',$value))
  98.                     $errors[$prop][self::ERROR_BAD_FORMAT;
  99.                 break;
  100.             case 'varchardate':
  101.             case 'date':
  102.                 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))
  103.                     $errors[$prop][self::ERROR_BAD_FORMAT;
  104.                 break;
  105.             }
  106.         }
  107.         return (count($errors)?$errors:false);
  108.     }
  109.  
  110.     /**
  111.      * set values on the properties which correspond to the primary
  112.      * key of the record
  113.      * This method accept a single or many values as parameter
  114.      */
  115.     public function setPk(){
  116.         $args=func_get_args();
  117.         if(count($args)==&& is_array($args[0])){
  118.             $args=$args[0];
  119.         }
  120.         $pkf $this->getPrimaryKeyNames();
  121.  
  122.         if(count($args== || count($args!= count($pkf) ) 
  123.             throw new jException('jelix~dao.error.keys.missing');
  124.  
  125.         foreach($pkf as $k=>$prop){
  126.             $this->$prop $args[$k];
  127.         }
  128.         return true;
  129.     }
  130.  
  131.     /**
  132.      * return the value of fields corresponding to the primary key
  133.      * @return mixed  the value or an array of values if there is several  pk
  134.      * @since 1.0b3
  135.      */
  136.     public function getPk(){
  137.         $pkf $this->getPrimaryKeyNames();
  138.         if(count($pkf== 1){
  139.             return $this->{$pkf[0]};
  140.         }else{
  141.             $list array();
  142.             foreach($pkf as $k=>$prop){
  143.                 $list[$this->$prop;
  144.             }
  145.             return $list;
  146.         }
  147.     }
  148.     
  149.     /**
  150.      * save the record
  151.      * @return integer  1 if success (the number of affected rows). False if the query has failed.
  152.      * @since 1.4
  153.      */
  154.     function save({
  155.         $dao jDao::get($this->getSelector());
  156.         $pkFields $this->getPrimaryKeyNames();
  157.  
  158.         if ($this->{$pkFields[0]== null)
  159.             return $dao->insert($this);
  160.         else
  161.             return $dao->update($this);
  162.     }
  163.  
  164. }

Documentation generated on Wed, 04 Jan 2017 22:53:27 +0100 by phpDocumentor 1.4.3