Source for file jDaoProperty.class.php

Documentation is available at jDaoProperty.class.php

  1. <?php
  2. /**
  3. @package     jelix
  4. @subpackage  dao
  5. @author      Croes GĂ©rald, Laurent Jouanneau
  6. @contributor Laurent Jouanneau
  7. @copyright   2001-2005 CopixTeam, 2005-2006 Laurent Jouanneau
  8. *  This class was get originally from the Copix project (CopixDAODefinitionV1, Copix 2.3dev20050901, http://www.copix.org)
  9. *  Few lines of code are still copyrighted 2001-2005 CopixTeam (LGPL licence).
  10. *  Initial authors of this Copix class are Gerald Croes and Laurent Jouanneau,
  11. *  and this class was adapted/improved for Jelix by Laurent Jouanneau
  12. *
  13. @link        http://www.jelix.org
  14. @licence  http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public Licence, see LICENCE file
  15. */
  16.  
  17. /**
  18.  * Container for properties of a dao property
  19.  * @package  jelix
  20.  * @subpackage dao
  21.  */
  22.  
  23. class jDaoProperty {
  24.     /**
  25.     * the name of the property of the object
  26.     */
  27.     public $name = '';
  28.  
  29.     /**
  30.     * the name of the field in table
  31.     */
  32.     public $fieldName = '';
  33.  
  34.     /**
  35.     * give the regular expression that needs to be matched against.
  36.     * @var string 
  37.     */
  38.     public $regExp = null;
  39.  
  40.     /**
  41.     * says if the field is required when doing a check
  42.     * @var boolean 
  43.     */
  44.     public $required = false;
  45.  
  46.     /**
  47.     * says if the value of the field is required when construct SQL conditions
  48.     * @var boolean 
  49.     */
  50.     public $requiredInConditions = false;
  51.  
  52.     /**
  53.     * Says if it's a primary key.
  54.     * @var boolean 
  55.     */
  56.     public $isPK = false;
  57.  
  58.     /**
  59.     * Says if it's a foreign key
  60.     * @var boolean 
  61.     */
  62.     public $isFK = false;
  63.  
  64.     public $datatype;
  65.  
  66.     public $table=null;
  67.     public $updatePattern='%s';
  68.     public $insertPattern='%s';
  69.     public $selectPattern='%s';
  70.     public $sequenceName='';
  71.  
  72.     /**
  73.     * the maxlength of the key if given
  74.     * @var int 
  75.     */
  76.     public $maxlength = null;
  77.     public $minlength = null;
  78.  
  79.     public $ofPrimaryTable = true;
  80.  
  81.     public $defaultValue = null;
  82.     /**
  83.     * constructor.
  84.     */
  85.     function __construct ($aParams$def){
  86.         $needed array('name''fieldname''table''datatype''required',
  87.                         'minlength''maxlength''regexp''sequence''default');
  88.  
  89.         $params $def->getAttr($aParams$needed);
  90.  
  91.         if ($params['name']===null){
  92.             throw new jDaoXmlException ('missing.attr'array('name''property'));
  93.         }
  94.         $this->name       = $params['name'];
  95.  
  96.         if(!preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/'$this->name)){
  97.             throw new jDaoXmlException ('property.invalid.name'$this->name);
  98.         }
  99.  
  100.  
  101.         $this->fieldName  = $params['fieldname'!==null $params['fieldname'$this->name;
  102.         $this->table      = $params['table'!==null $params['table'$def->getPrimaryTable();
  103.  
  104.         $tables $def->getTables();
  105.  
  106.         if(!isset$tables[$this->table])){
  107.             throw new jDaoXmlException ('property.unknow.table'$this->name);
  108.         }
  109.  
  110.         $this->required   = $this->requiredInConditions = $def->getBool ($params['required']);
  111.         $this->maxlength  = $params['maxlength'!== null intval($params['maxlength']null;
  112.         $this->minlength  = $params['minlength'!== null intval($params['minlength']null;
  113.         $this->regExp     = $params['regexp'];
  114.  
  115.         if ($params['datatype']===null){
  116.             throw new jDaoXmlException ('missing.attr'array('datatype''property'));
  117.         }
  118.         $params['datatype']=trim(strtolower($params['datatype']));
  119.  
  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'));
  128.         }
  129.         $this->datatype = strtolower($params['datatype']);
  130.         $this->needsQuotes in_array ($params['datatype'],
  131.                 array ('string''varchar''text''date''datetime''time'));
  132.  
  133.         $this->isPK = in_array($this->fieldName$tables[$this->table]['pk']);
  134.         if(!$this->isPK){
  135.             $this->isFK = isset($tables[$this->table]['fk'][$this->fieldName]);
  136.         else {
  137.             $this->required = true;
  138.             $this->requiredInConditions = true;
  139.         }
  140.  
  141.         if($this->datatype == 'autoincrement' || $this->datatype == 'bigautoincrement'{
  142.             if($params['sequence'!==null){
  143.                 $this->sequenceName = $params['sequence'];
  144.             }
  145.             $this->required = false;
  146.             $this->requiredInConditions = true;
  147.         }
  148.  
  149.         if($params['default'!== null{
  150.             switch($this->datatype{
  151.               case 'autoincrement':
  152.               case 'int':
  153.               case 'integer':
  154.                 $this->defaultValue = intval($params['default']);
  155.                 break;
  156.               case 'double':
  157.               case 'float':
  158.                 $this->defaultValue = doubleval($params['default']);
  159.                 break;
  160.               case 'boolean':
  161.                 $v $params['default'];
  162.                 $this->defaultValue = ($v =='1'|| $v=='t'|| strtolower($v=='true');
  163.                 break;
  164.               default:
  165.                 $this->defaultValue = $params['default'];
  166.             }
  167.         }
  168.  
  169.         // on ignore les attributs *pattern sur les champs PK et FK
  170.         if(!$this->isPK && !$this->isFK){
  171.             if(isset($aParams['updatepattern'])) {
  172.                 $this->updatePattern=(string)$aParams['updatepattern'];
  173.             }
  174.  
  175.             if(isset($aParams['insertpattern'])) {
  176.                 $this->insertPattern=(string)$aParams['insertpattern'];
  177.             }
  178.  
  179.             if(isset($aParams['selectpattern'])) {
  180.                 $this->selectPattern=(string)$aParams['selectpattern'];
  181.             }
  182.         }
  183.  
  184.         // no update and insert patterns for field of external tables
  185.         if($this->table != $def->getPrimaryTable()){
  186.             $this->updatePattern = '';
  187.             $this->insertPattern = '';
  188.             $this->required = false;
  189.             $this->requiredInConditions = false;
  190.             $this->ofPrimaryTable = false;
  191.         }else{
  192.             $this->ofPrimaryTable=true;
  193.         }
  194.     }
  195. }
  196.  
  197. ?>

Documentation generated on Wed, 07 Sep 2011 13:47:03 +0200 by phpDocumentor 1.4.3