blob: 73defc10b3011b71a73eed8091083e4254a24a43 [file] [log] [blame]
<?php
/**
* File containing the ezcPersistentObjectIdProperty class.
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
* @version //autogen//
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @package PersistentObject
*/
/**
* Defines a persistent object id field.
*
* The column should be of type int both in PHP and in the database, usually.
* If you want to use a string ID, you need to use the {@link
* ezcPersistentManualGenerator} and set the ID property of the affected object
* yourself. Alternatively you can implement your own {@link
* ezcPersistentIdentifierGenerator} to perform this operation consistently.
*
* The default value for the ID should be null, since {@link
* ezcPersistentSession::save()} determines if an object was already saved this
* way for integer IDs.
*
* For descriptions for some the constants used in this class see:
* {@link ezcPersisentObjectProperty}
*
* @property string $columnName The name of the database field that stores the
* value.
* @property string $propertyName The name of the PersistentObject property
* that holds the value in the PHP object.
* @property int $propertyType The type of the PHP property. See class
* constants ezcPersistentObjectProperty::PHP_TYPE_*.
* @property int $visibility The visibility of the property. This property is deprecated!
* @property ezcPersistentGeneratorDefinition $generator
* The type of generator to use for the identifier.
* The identifier generator must be an object that extends the
* abstract class ezcPersistentIdentifierGenerator. The current
* options that are part of this package are:
* - ezcPersistentSequenceGenerator
* - ezcPersistentManualGenerator
* - ezcPersistentNativeGenerator
* @property int $databaseType
* Type of the database column, as defined by PDO constants: {@link
* PDO::PARAM_BOOL}, {@link PDO::PARAM_INT}, {@link PDO::PARAM_STR}
* (default as defined by {@link ezcQuery::bindValue()}) or {@link
* PDO::PARAM_LOB} (important for binary data).
*
* @package PersistentObject
* @version //autogen//
*/
class ezcPersistentObjectIdProperty
{
/**
* Holds the properties for this class.
* @var array
*/
private $properties = array(
'columnName' => null,
'resultColumnName' => null,
'propertyName' => null,
'propertyType' => ezcPersistentObjectProperty::PHP_TYPE_INT,
'generator' => null,
'visibility' => null,
'databaseType' => PDO::PARAM_STR,
);
/**
* Constructs a new PersistentObjectField
*
* @param string $columnName The name of the database field that stores the value.
* @param string $propertyName The name of the class member
* @param int $visibility See {@link $visibility} for possible values.
* @param ezcPersistentGeneratorDefinition $generator Definition of the identifier generator
* @param int $propertyType See {@link ezcPersistentObjectProperty} for possible values.
* @param int $databaseType See {@link PDO::*} for possible values.
*/
public function __construct(
$columnName = null,
$propertyName = null,
$visibility = null,
ezcPersistentGeneratorDefinition $generator = null,
$propertyType = ezcPersistentObjectProperty::PHP_TYPE_INT,
$databaseType = PDO::PARAM_STR
)
{
$this->columnName = $columnName;
$this->propertyName = $propertyName;
$this->visibility = $visibility;
$this->generator = $generator;
$this->propertyType = $propertyType;
$this->databaseType = $databaseType;
}
/**
* Property read access.
*
* @param string $propertyName Name of the property.
* @return mixed Value of the property or null.
*
* @throws ezcBasePropertyNotFoundException
* If the the desired property is not found.
* @ignore
*/
public function __get( $propertyName )
{
if ( $this->__isset( $propertyName ) )
{
return $this->properties[$propertyName];
}
throw new ezcBasePropertyNotFoundException( $propertyName );
}
/**
* Property write access.
*
* @param string $propertyName Name of the property.
* @param mixed $propertyValue The value for the property.
*
* @throws ezcBasePropertyNotFoundException
* If a the value for the property options is not an instance of
* @throws ezcBaseValueException
* If a the value for a property is out of range.
* @ignore
*/
public function __set( $propertyName, $propertyValue )
{
switch ( $propertyName )
{
case 'columnName':
if ( is_string( $propertyValue ) === false && is_null( $propertyValue ) === false )
{
throw new ezcBaseValueException(
$propertyName,
$propertyValue,
'string or null'
);
}
$this->properties['resultColumnName'] = ( $propertyValue !== null ) ? strtolower( $propertyValue ) : null;
break;
case 'propertyName':
if ( is_string( $propertyValue ) === false && is_null( $propertyValue ) === false )
{
throw new ezcBaseValueException(
$propertyName,
$propertyValue,
'string or null'
);
}
break;
case 'propertyType':
case 'visibility':
if ( is_int( $propertyValue ) === false && is_null( $propertyValue ) === false )
{
throw new ezcBaseValueException(
$propertyName,
$propertyValue,
'int or null'
);
}
break;
case 'generator':
if ( ( is_object( $propertyValue ) === false || ( $propertyValue instanceof ezcPersistentGeneratorDefinition ) === false ) && is_null( $propertyValue ) === false )
{
throw new ezcBaseValueException(
$propertyName,
$propertyValue,
'ezcPersistentGeneratorDefinition or null'
);
}
break;
case 'databaseType':
if ( $propertyValue !== PDO::PARAM_STR && $propertyValue !== PDO::PARAM_LOB && $propertyValue !== PDO::PARAM_INT && PDO::PARAM_BOOL )
{
throw new ezcBaseValueException(
$propertyName,
$propertyValue,
'PDO::PARAM_STR, PDO::PARAM_LOB, PDO::PARAM_INT or PDO::PARAM_BOOL'
);
}
break;
default:
throw new ezcBasePropertyNotFoundException( $propertyName );
break;
}
$this->properties[$propertyName] = $propertyValue;
}
/**
* Property isset access.
*
* @param string $propertyName Name of the property.
* @return bool True is the property is set, otherwise false.
* @ignore
*/
public function __isset( $propertyName )
{
return array_key_exists( $propertyName, $this->properties );
}
/**
* Returns a new instance of this class with the data specified by $array.
*
* $array contains all the data members of this class in the form:
* array('member_name'=>value).
*
* __set_state makes this class exportable with var_export.
* var_export() generates code, that calls this method when it
* is parsed with PHP.
*
* @param array(string=>mixed) $array
* @return ezcPersistentObjectIdProperty
*/
public static function __set_state( array $array )
{
if ( isset( $array['properties'] ) && count( $array ) === 1 )
{
return new ezcPersistentObjectIdProperty(
$array['properties']['columnName'],
$array['properties']['propertyName'],
$array['properties']['visibility'],
$array['properties']['generator'],
( isset( $array['properties']['databaseType'] ) ? $array['properties']['databaseType'] : PDO::PARAM_STR )
);
}
else
{
return new ezcPersistentObjectIdProperty(
$array['columnName'],
$array['propertyName'],
$array['visibility'],
$array['generator'],
( isset( $array['databaseType'] ) ? $array['databaseType'] : PDO::PARAM_STR )
);
}
}
}
?>