diff --git a/lib/Doctrine/AuditLog.php b/lib/Doctrine/AuditLog.php index 3f574baf5..5044327a9 100644 --- a/lib/Doctrine/AuditLog.php +++ b/lib/Doctrine/AuditLog.php @@ -43,10 +43,6 @@ class Doctrine_AuditLog public function __construct($options) { $this->_options = array_merge($this->_options, $options); - - $this->_options['className'] = str_replace('%CLASS%', - $this->_options['table']->getComponentName(), - $this->_options['className']); } /** * __get @@ -133,7 +129,11 @@ class Doctrine_AuditLog return $q->execute($values, Doctrine_HYDRATE::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'; diff --git a/lib/Doctrine/AuditLog/Listener.php b/lib/Doctrine/AuditLog/Listener.php index ff3ed9a01..0405393ab 100644 --- a/lib/Doctrine/AuditLog/Listener.php +++ b/lib/Doctrine/AuditLog/Listener.php @@ -52,6 +52,7 @@ class Doctrine_AuditLog_Listener extends Doctrine_Record_Listener $version = new $class(); $version->merge($record->toArray()); + $version->save(); $versionColumn = $this->_auditLog->getOption('versionColumn'); $version = $record->get($versionColumn); @@ -60,8 +61,14 @@ class Doctrine_AuditLog_Listener extends Doctrine_Record_Listener } public function preUpdate(Doctrine_Event $event) { + $class = $this->_auditLog->getOption('className'); + $record = $event->getInvoker(); + + $version = new $class(); + $version->merge($record->toArray()); + $version->save(); + $versionColumn = $this->_auditLog->getOption('versionColumn'); - $record = $event->getInvoker(); $version = $record->get($versionColumn); diff --git a/lib/Doctrine/Template/Versionable.php b/lib/Doctrine/Template/Versionable.php new file mode 100644 index 000000000..8a94582be --- /dev/null +++ b/lib/Doctrine/Template/Versionable.php @@ -0,0 +1,51 @@ +. + */ +/** + * Doctrine_Template_Versionable + * + * @package Doctrine + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @category Object Relational Mapping + * @link www.phpdoctrine.com + * @since 1.0 + * @version $Revision$ + * @author Konsta Vesterinen + */ +class Doctrine_Template_Versionable extends Doctrine_Template +{ + protected $_auditLog; + + public function __construct(array $options) + { + $this->_auditLog = new Doctrine_AuditLog($options); + } + public function setUp() + { + $this->_auditLog->setOption('table', $this->_table); + $this->_auditLog->buildDefinition($this->_table); + + $this->addListener(new Doctrine_AuditLog_Listener($this->_auditLog)); + } + public function getAuditLog() + { + return $this->_auditLog; + } +}