PreUpdateEventArgs.php 2.12 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
<?php

namespace Doctrine\ORM\Event;

use Doctrine\Common\EventArgs,
    Doctrine\ORM\EntityManager;

/**
 * Class that holds event arguments for a preInsert/preUpdate event.
 *
 * @author Roman Borschel <roman@code-factory.org>
 * @author Benjamin Eberlei <kontakt@beberlei.de>
 * @since 2.0
 */
class PreUpdateEventArgs extends LifecycleEventArgs
{
    /**
     * @var array
     */
    private $_entityChangeSet;

    /**
     *
     * @param object $entity
     * @param EntityManager $em
     * @param array $changeSet
     */
    public function __construct($entity, $em, array &$changeSet)
    {
        parent::__construct($entity, $em);
        $this->_entityChangeSet = &$changeSet;
    }

    public function getEntityChangeSet()
    {
        return $this->_entityChangeSet;
    }

    /**
     * Field has a changeset?
     *
     * @return bool
     */
    public function hasChangedField($field)
    {
        return isset($this->_entityChangeSet[$field]);
    }

    /**
     * Get the old value of the changeset of the changed field.
     * 
     * @param  string $field
     * @return mixed
     */
    public function getOldValue($field)
    {
    	$this->_assertValidField($field);

        return $this->_entityChangeSet[$field][0];
    }

    /**
     * Get the new value of the changeset of the changed field.
     *
     * @param  string $field
     * @return mixed
     */
    public function getNewValue($field)
    {
        $this->_assertValidField($field);

        return $this->_entityChangeSet[$field][1];
    }

    /**
     * Set the new value of this field.
     * 
     * @param string $field
     * @param mixed $value
     */
    public function setNewValue($field, $value)
    {
        $this->_assertValidField($field);

        $this->_entityChangeSet[$field][1] = $value;
    }

    private function _assertValidField($field)
    {
    	if (!isset($this->_entityChangeSet[$field])) {
            throw new \InvalidArgumentException(
                "Field '".$field."' is not a valid field of the entity ".
                "'".get_class($this->getEntity())."' in PreInsertUpdateEventArgs."
            );
        }
    }
}