From 163c1aaa61ef04b2539148bc5993b81987d612a6 Mon Sep 17 00:00:00 2001 From: zYne Date: Tue, 17 Jul 2007 20:45:10 +0000 Subject: [PATCH] --- lib/Doctrine/AuditLog.php | 123 ++++++----------------------- lib/Doctrine/AuditLog/Listener.php | 3 +- 2 files changed, 24 insertions(+), 102 deletions(-) diff --git a/lib/Doctrine/AuditLog.php b/lib/Doctrine/AuditLog.php index a78ee9409..f24d1b57d 100644 --- a/lib/Doctrine/AuditLog.php +++ b/lib/Doctrine/AuditLog.php @@ -33,20 +33,16 @@ class Doctrine_AuditLog { protected $_options = array( 'className' => '%CLASS%Version', - 'deleteTrigger' => '%TABLE%_ddtr', - 'updateTrigger' => '%TABLE%_dutr', - 'versionTable' => '%TABLE%_dvt', - 'versionColumn' => 'version', + 'versionColumn' => 'version', + 'generateFiles' => false, + 'table' => null, ); - - protected $_table; - + protected $_auditTable; - public function __construct(Doctrine_Table $table) + public function __construct($options) { - $this->_table = $table; - + $this->_options = array_merge($this->_options, $options); } /** * __get @@ -111,25 +107,7 @@ class Doctrine_AuditLog } return null; } - public function audit() - { - $conn = $this->_table->getConnection(); - // begin new transaction - $conn->beginTransaction(); - try { - - // create the version table and the triggers - $this->createVersionTable(); - $conn->execute($this->deleteTriggerSql()); - $conn->execute($this->updateTriggerSql()); - - // commit structure changes - $conn->commit(); - } catch(Doctrine_Connection_Exception $e) { - $conn->rollback(); - } - } public function getVersion(Doctrine_Record $record, $version) { $className = str_replace('%CLASS%', $this->_table->getComponentName(), $this->_options['className']); @@ -149,88 +127,31 @@ class Doctrine_AuditLog ->where($where) ->execute($values, Doctrine_HYDRATE::HYDRATE_ARRAY); } - public function createVersionTable() + public function buildDefinition(Doctrine_Table $table) { - $data = $this->_table->getExportableFormat(false); - $conn = $this->_table->getConnection(); - $data['tableName'] = str_replace('%TABLE%', $data['tableName'], $this->_options['versionTable']); + $name = $table->getComponentName(); - foreach ($data['columns'] as $name => $def) { - unset($data['columns'][$name]['autoinc']); - unset($data['columns'][$name]['autoincrement']); - unset($data['columns'][$name]['sequence']); - unset($data['columns'][$name]['seq']); + $className = $name . 'Version'; + + if (class_exists($className)) { + return false; } - $data['columns'][$this->_options['versionColumn']]['primary'] = true; - $className = str_replace('%CLASS%', $this->_table->getComponentName(), $this->_options['className']); - $definition = 'class ' . $className - . ' extends Doctrine_Record { ' - . 'public function setTableDefinition() { ' - . '$this->hasColumns(' . var_export($data['columns'], true) . ');' - . '$this->option(\'tableName\', \'' . $data['tableName'] . '\'); } }'; + $columns = $table->getColumns(); - $this->_table->getRelationParser()->bind($className, array( - 'local' => $this->_table->getIdentifier(), - 'foreign' => $this->_table->getIdentifier(), - 'type' => Doctrine_Relation::MANY)); + $id = $table->getIdentifier(); + $options = array('className' => $className); - $this->_table->addListener(new Doctrine_AuditLog_Listener($this)); + $builder = new Doctrine_Import_Builder(); - eval($definition); + $options['primary'][] = $this->_options['versionColumn']; - $data['options']['primary'][] = $this->_options['versionColumn']; + $def = $builder->buildDefinition($options, $columns); - - $this->_auditTable = $this->_table->getConnection()->getTable($className); - } - /** - * deleteTriggerSql - * - * returns the sql needed for the delete trigger creation - */ - public function deleteTriggerSql() - { - $conn = $this->_table->getConnection(); - $columnNames = $this->_table->getColumnNames(); - $oldColumns = array_map(array($this, 'formatOld'), $columnNames); - $sql = 'CREATE TRIGGER ' - . $conn->quoteIdentifier($this->_table->getTableName()) . '_ddt' . ' BEFORE DELETE ON ' - . $conn->quoteIdentifier($this->_table->getTableName()) - . ' BEGIN' - . ' INSERT INTO ' . $this->_table->getTableName() . '_dvt (' - . implode(', ', array_map(array($conn, 'quoteIdentifier'), $columnNames)) - . ') VALUES (' - . implode(', ', array_map(array($conn, 'quoteIdentifier'), $oldColumns)) - . ');' - . ' END;'; - return $sql; - } - /** - * updateTriggerSql - * - * returns the sql needed for the update trigger creation - */ - public function updateTriggerSql() - { - $conn = $this->_table->getConnection(); - $columnNames = $this->_table->getColumnNames(); - $oldColumns = array_map(array($this, 'formatOld'), $columnNames); - $sql = 'CREATE TRIGGER ' - . $conn->quoteIdentifier($this->_table->getTableName()) . '_dut' . ' UPDATE ON ' - . $conn->quoteIdentifier($this->_table->getTableName()) - . ' BEGIN' - . ' INSERT INTO ' . $this->_table->getTableName() . '_dvt (' - . implode(', ', array_map(array($conn, 'quoteIdentifier'), $columnNames)) - . ') VALUES (' - . implode(', ', array_map(array($conn, 'quoteIdentifier'), $oldColumns)) - . ');' - . ' END;'; - return $sql; - } - public function formatOld($column) - { - return 'old.' . $column; + if ( ! $this->_options['generateFiles']) { + eval($def); + } + return true; } } diff --git a/lib/Doctrine/AuditLog/Listener.php b/lib/Doctrine/AuditLog/Listener.php index 404f10cae..6bc9506a8 100644 --- a/lib/Doctrine/AuditLog/Listener.php +++ b/lib/Doctrine/AuditLog/Listener.php @@ -18,6 +18,7 @@ * and is licensed under the LGPL. For more information, see * . */ +Doctrine::autoload('Doctrine_Record_Listener'); /** * Doctrine_AuditLog_Listener * @@ -29,7 +30,7 @@ * @version $Revision$ * @author Konsta Vesterinen */ -class Doctrine_AuditLog_Listener extends Doctrine_EventListener +class Doctrine_AuditLog_Listener extends Doctrine_Record_Listener { protected $_auditLog;