. */ /** * Doctrine_Template_Versionable * * Add revisioning/audit log to your models * * @package Doctrine * @subpackage Template * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @link www.phpdoctrine.org * @since 1.0 * @version $Revision$ * @author Konsta Vesterinen */ class Doctrine_Template_Versionable extends Doctrine_Template { /** * Array of AuditLog Options * * @var array */ protected $_options = array('version' => array('name' => 'version', 'alias' => null, 'type' => 'integer', 'length' => 8, 'options' => array()), 'generateRelations' => true, 'tableName' => false, 'generateFiles' => false, 'auditLog' => true, 'deleteVersions' => true); /** * __construct * * @param array $options * @return void */ public function __construct(array $options = array()) { parent::__construct($options); $this->_plugin = new Doctrine_AuditLog($this->_options); } /** * Setup the Versionable behavior for the template * * @return void */ public function setUp() { if ($this->_plugin->getOption('auditLog')) { $this->_plugin->initialize($this->_table); } $version = $this->_options['version']; $name = $version['name'] . (isset($version['alias']) ? ' as ' . $version['alias'] : ''); $this->hasColumn($name, $version['type'], $version['length'], $version['options']); $this->addListener(new Doctrine_AuditLog_Listener($this->_plugin)); } /** * Get plugin for Versionable template * * @return void */ public function getAuditLog() { return $this->_plugin; } /** * revert * reverts this record to given version, this method only works if versioning plugin * is enabled * * @throws Doctrine_Record_Exception if given version does not exist * @param integer $version an integer > 1 * @return Doctrine_Record this object */ public function revert($version) { $auditLog = $this->_plugin; if ( ! $auditLog->getOption('auditLog')) { throw new Doctrine_Record_Exception('Audit log is turned off, no version history is recorded.'); } $data = $auditLog->getVersion($this->getInvoker(), $version); if ( ! isset($data[0])) { throw new Doctrine_Record_Exception('Version ' . $version . ' does not exist!'); } $this->getInvoker()->merge($data[0]); return $this->getInvoker(); } }