123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320 |
- <?php
- /**
- * This file is part of the Propel package.
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- *
- * @license MIT License
- */
- /**
- * This class contains attributes and methods that are used by all
- * business objects within the system.
- *
- * @author Hans Lellelid <hans@xmpl.org> (Propel)
- * @author Frank Y. Kim <frank.kim@clearink.com> (Torque)
- * @author John D. McNally <jmcnally@collab.net> (Torque)
- * @version $Revision: 1673 $
- * @package propel.runtime.om
- */
- abstract class BaseObject
- {
- /**
- * attribute to determine if this object has previously been saved.
- * @var boolean
- */
- protected $_new = true;
- /**
- * attribute to determine whether this object has been deleted.
- * @var boolean
- */
- protected $_deleted = false;
- /**
- * The columns that have been modified in current object.
- * Tracking modified columns allows us to only update modified columns.
- * @var array
- */
- protected $modifiedColumns = array();
-
- /**
- * The (virtual) columns that are added at runtime
- * The formatters can add supplementary columns based on a resultset
- * @var array
- */
- protected $virtualColumns = array();
-
- /**
- * Empty constructor (this allows people with their own BaseObject implementation to use its constructor)
- */
- public function __construct() {
- }
- /**
- * Returns whether the object has been modified.
- *
- * @return boolean True if the object has been modified.
- */
- public function isModified()
- {
- return !empty($this->modifiedColumns);
- }
- /**
- * Has specified column been modified?
- *
- * @param string $col column fully qualified name (BasePeer::TYPE_COLNAME), e.g. Book::AUTHOR_ID
- * @return boolean True if $col has been modified.
- */
- public function isColumnModified($col)
- {
- return in_array($col, $this->modifiedColumns);
- }
- /**
- * Get the columns that have been modified in this object.
- * @return array A unique list of the modified column names for this object.
- */
- public function getModifiedColumns()
- {
- return array_unique($this->modifiedColumns);
- }
- /**
- * Returns whether the object has ever been saved. This will
- * be false, if the object was retrieved from storage or was created
- * and then saved.
- *
- * @return true, if the object has never been persisted.
- */
- public function isNew()
- {
- return $this->_new;
- }
- /**
- * Setter for the isNew attribute. This method will be called
- * by Propel-generated children and Peers.
- *
- * @param boolean $b the state of the object.
- */
- public function setNew($b)
- {
- $this->_new = (boolean) $b;
- }
- /**
- * Whether this object has been deleted.
- * @return boolean The deleted state of this object.
- */
- public function isDeleted()
- {
- return $this->_deleted;
- }
- /**
- * Specify whether this object has been deleted.
- * @param boolean $b The deleted state of this object.
- * @return void
- */
- public function setDeleted($b)
- {
- $this->_deleted = (boolean) $b;
- }
- /**
- * Code to be run before persisting the object
- * @param PropelPDO $con
- * @return bloolean
- */
- public function preSave(PropelPDO $con = null)
- {
- return true;
- }
- /**
- * Code to be run after persisting the object
- * @param PropelPDO $con
- */
- public function postSave(PropelPDO $con = null) { }
- /**
- * Code to be run before inserting to database
- * @param PropelPDO $con
- * @return boolean
- */
- public function preInsert(PropelPDO $con = null)
- {
- return true;
- }
-
- /**
- * Code to be run after inserting to database
- * @param PropelPDO $con
- */
- public function postInsert(PropelPDO $con = null) { }
- /**
- * Code to be run before updating the object in database
- * @param PropelPDO $con
- * @return boolean
- */
- public function preUpdate(PropelPDO $con = null)
- {
- return true;
- }
- /**
- * Code to be run after updating the object in database
- * @param PropelPDO $con
- */
- public function postUpdate(PropelPDO $con = null) { }
- /**
- * Code to be run before deleting the object in database
- * @param PropelPDO $con
- * @return boolean
- */
- public function preDelete(PropelPDO $con = null)
- {
- return true;
- }
- /**
- * Code to be run after deleting the object in database
- * @param PropelPDO $con
- */
- public function postDelete(PropelPDO $con = null) { }
-
- /**
- * Sets the modified state for the object to be false.
- * @param string $col If supplied, only the specified column is reset.
- * @return void
- */
- public function resetModified($col = null)
- {
- if ($col !== null) {
- while (($offset = array_search($col, $this->modifiedColumns)) !== false) {
- array_splice($this->modifiedColumns, $offset, 1);
- }
- } else {
- $this->modifiedColumns = array();
- }
- }
- /**
- * Compares this with another <code>BaseObject</code> instance. If
- * <code>obj</code> is an instance of <code>BaseObject</code>, delegates to
- * <code>equals(BaseObject)</code>. Otherwise, returns <code>false</code>.
- *
- * @param obj The object to compare to.
- * @return Whether equal to the object specified.
- */
- public function equals($obj)
- {
- $thisclazz = get_class($this);
- if (is_object($obj) && $obj instanceof $thisclazz) {
- if ($this === $obj) {
- return true;
- } elseif ($this->getPrimaryKey() === null || $obj->getPrimaryKey() === null) {
- return false;
- } else {
- return ($this->getPrimaryKey() === $obj->getPrimaryKey());
- }
- } else {
- return false;
- }
- }
- /**
- * If the primary key is not <code>null</code>, return the hashcode of the
- * primary key. Otherwise calls <code>Object.hashCode()</code>.
- *
- * @return int Hashcode
- */
- public function hashCode()
- {
- $ok = $this->getPrimaryKey();
- if ($ok === null) {
- return crc32(serialize($this));
- }
- return crc32(serialize($ok)); // serialize because it could be an array ("ComboKey")
- }
-
- /**
- * Get the associative array of the virtual columns in this object
- *
- * @param string $name The virtual column name
- *
- * @return array
- */
- public function getVirtualColumns()
- {
- return $this->virtualColumns;
- }
- /**
- * Checks the existence of a virtual column in this object
- *
- * @return boolean
- */
- public function hasVirtualColumn($name)
- {
- return array_key_exists($name, $this->virtualColumns);
- }
-
- /**
- * Get the value of a virtual column in this object
- *
- * @return mixed
- */
- public function getVirtualColumn($name)
- {
- if (!$this->hasVirtualColumn($name)) {
- throw new PropelException('Cannot get value of inexistent virtual column ' . $name);
- }
- return $this->virtualColumns[$name];
- }
-
- /**
- * Get the value of a virtual column in this object
- *
- * @param string $name The virtual column name
- * @param mixed $value The value to give to the virtual column
- *
- * @return BaseObject The current object, for fluid interface
- */
- public function setVirtualColumn($name, $value)
- {
- $this->virtualColumns[$name] = $value;
- return $this;
- }
- /**
- * Logs a message using Propel::log().
- *
- * @param string $msg
- * @param int $priority One of the Propel::LOG_* logging levels
- * @return boolean
- */
- protected function log($msg, $priority = Propel::LOG_INFO)
- {
- return Propel::log(get_class($this) . ': ' . $msg, $priority);
- }
-
- /**
- * Clean up internal collections prior to serializing
- * Avoids recursive loops that turn into segmentation faults when serializing
- */
- public function __sleep()
- {
- $this->clearAllReferences();
- return array_keys(get_object_vars($this));
- }
- }
|