. */ /** * Doctrine_AuditLog * * @package Doctrine * @subpackage AuditLog * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @link www.phpdoctrine.com * @since 1.0 * @version $Revision$ * @author Konsta Vesterinen */ class Doctrine_AuditLog extends Doctrine_Plugin { protected $_options = array( 'className' => '%CLASS%Version', 'versionColumn' => 'version', 'generateFiles' => false, 'table' => false, 'pluginTable' => false, ); public function __construct($options) { $this->_options = array_merge($this->_options, $options); } public function getVersion(Doctrine_Record $record, $version) { $className = $this->_options['className']; $q = new Doctrine_Query(); $values = array(); foreach ((array) $this->_options['table']->getIdentifier() as $id) { $conditions[] = $className . '.' . $id . ' = ?'; $values[] = $record->get($id); } $where = implode(' AND ', $conditions) . ' AND ' . $className . '.' . $this->_options['versionColumn'] . ' = ?'; $values[] = $version; $q->from($className) ->where($where); return $q->execute($values, Doctrine::HYDRATE_ARRAY); } public function buildDefinition(Doctrine_Table $table) { $this->_options['className'] = str_replace('%CLASS%', $this->_options['table']->getComponentName(), $this->_options['className']); $name = $table->getComponentName(); $className = $name . 'Version'; // check that class doesn't exist (otherwise we cannot create it) if (class_exists($className)) { return false; } $columns = $table->getColumns(); // remove all sequence, autoincrement and unique constraint definitions foreach ($columns as $column => $definition) { unset($columns[$column]['autoincrement']); unset($columns[$column]['sequence']); unset($columns[$column]['unique']); } // the version column should be part of the primary key definition $columns[$this->_options['versionColumn']] = array('type' => 'integer', 'length' => 8, 'primary' => true); $id = $table->getIdentifier(); $options = array('className' => $className); $relations = array($name => array('local' => $id, 'foreign' => $id, 'onDelete' => 'CASCADE', 'onUpdate' => 'CASCADE')); $this->generateClass($options, $columns, array()); $this->_options['pluginTable'] = $table->getConnection()->getTable($this->_options['className']); return true; } }