]> git.andy128k.dev Git - ipf-legacy-orm.git/commitdiff
magic-call-based record listeners
authorAndrey Kutejko <andy128k@gmail.com>
Sat, 8 Jun 2013 17:19:25 +0000 (20:19 +0300)
committerAndrey Kutejko <andy128k@gmail.com>
Sat, 8 Jun 2013 17:19:25 +0000 (20:19 +0300)
18 files changed:
ipf/orm.php
ipf/orm/configurable.php
ipf/orm/connection/unitofwork.php
ipf/orm/hydrator.php
ipf/orm/import/builder.php
ipf/orm/manager.php
ipf/orm/query/abstract.php
ipf/orm/record/abstract.php
ipf/orm/record/listener.php [deleted file]
ipf/orm/record/listener/chain.php [deleted file]
ipf/orm/record/listener/interface.php [deleted file]
ipf/orm/table.php
ipf/orm/template/listener/orderable.php
ipf/orm/template/listener/sluggable.php
ipf/orm/template/listener/timestampable.php
ipf/orm/template/orderable.php
ipf/orm/template/sluggable.php
ipf/orm/template/timestampable.php

index 348c236cb1bb8d6b67e225638f0f3171b719092f..42a4e9620fcb09ec662fc0013950a31ba78a0f68 100644 (file)
@@ -131,7 +131,6 @@ final class IPF_ORM {
     const ATTR_CACHE_LIFESPAN           = 151;
     const ATTR_RESULT_CACHE_LIFESPAN    = 151;
     const ATTR_LOAD_REFERENCES          = 153;
-    const ATTR_RECORD_LISTENER          = 154;
     const ATTR_THROW_EXCEPTIONS         = 155;
     const ATTR_DEFAULT_PARAM_NAMESPACE  = 156;
     const ATTR_QUERY_CACHE              = 157;
index c7ca7fb3cfe4198fefdcf4551003a39beeceb297..98bf3a17a59890caf32aea3814a4a5f14068d3dc 100644 (file)
@@ -72,7 +72,6 @@ abstract class IPF_ORM_Configurable extends IPF_ORM_Locator_Injectable
             case IPF_ORM::ATTR_EXPORT:
             case IPF_ORM::ATTR_DECIMAL_PLACES:
             case IPF_ORM::ATTR_LOAD_REFERENCES:
-            case IPF_ORM::ATTR_RECORD_LISTENER:
             case IPF_ORM::ATTR_THROW_EXCEPTIONS:
             case IPF_ORM::ATTR_DEFAULT_PARAM_NAMESPACE:
             case IPF_ORM::ATTR_AUTOLOAD_TABLE_CLASSES:
@@ -183,41 +182,6 @@ abstract class IPF_ORM_Configurable extends IPF_ORM_Locator_Injectable
         return true;
     }
 
-    public function addRecordListener($listener, $name = null)
-    {
-        if ( ! isset($this->attributes[IPF_ORM::ATTR_RECORD_LISTENER]) ||
-             ! ($this->attributes[IPF_ORM::ATTR_RECORD_LISTENER] instanceof IPF_ORM_Record_Listener_Chain)) {
-
-            $this->attributes[IPF_ORM::ATTR_RECORD_LISTENER] = new IPF_ORM_Record_Listener_Chain();
-        }
-        $this->attributes[IPF_ORM::ATTR_RECORD_LISTENER]->add($listener, $name);
-
-        return $this;
-    }
-
-    public function getRecordListener()
-    {
-        if ( ! isset($this->attributes[IPF_ORM::ATTR_RECORD_LISTENER])) {
-            if (isset($this->parent)) {
-                return $this->parent->getRecordListener();
-            }
-            return null;
-        }
-        return $this->attributes[IPF_ORM::ATTR_RECORD_LISTENER];
-    }
-
-    public function setRecordListener($listener)
-    {
-        if ( ! ($listener instanceof IPF_ORM_Record_Listener_Interface)
-            && ! ($listener instanceof IPF_ORM_Overloadable)
-        ) {
-            throw new IPF_ORM_Exception("Couldn't set eventlistener. Record listeners should implement either IPF_ORM_Record_Listener_Interface or IPF_ORM_Overloadable");
-        }
-        $this->attributes[IPF_ORM::ATTR_RECORD_LISTENER] = $listener;
-
-        return $this;
-    }
-
     public function getAttribute($attribute)
     {
         if (is_string($attribute)) {
index 887fa5d29758f1aabd31ce49b32d2e484db779dc..d4e85b97c96c06253d8c3be453aeefbcab9c4540 100644 (file)
@@ -21,7 +21,7 @@ class IPF_ORM_Connection_UnitOfWork extends IPF_ORM_Connection_Module
         if ($record->isValid()) {
             $event = new IPF_ORM_Event($record, IPF_ORM_Event::RECORD_SAVE);
             $record->preSave($event);
-            $record->getTable()->getRecordListener()->preSave($event);
+            $record->getTable()->notifyRecordListeners('preSave', $event);
             $state = $record->state();
 
             if ( ! $event->skipOperation) {
@@ -44,7 +44,7 @@ class IPF_ORM_Connection_UnitOfWork extends IPF_ORM_Connection_Module
                 $pendingDelete->delete();
             }
 
-            $record->getTable()->getRecordListener()->postSave($event);
+            $record->getTable()->notifyRecordListeners('postSave', $event);
             $record->postSave($event);
         } else {
             $conn->transaction->addInvalid($record);
@@ -81,7 +81,7 @@ class IPF_ORM_Connection_UnitOfWork extends IPF_ORM_Connection_Module
 
         $record->preSave($event);
 
-        $record->getTable()->getRecordListener()->preSave($event);
+        $record->getTable()->notifyRecordListeners('preSave', $event);
 
         if ( ! $event->skipOperation) {
             switch ($record->state()) {
@@ -99,7 +99,7 @@ class IPF_ORM_Connection_UnitOfWork extends IPF_ORM_Connection_Module
             }
         }
 
-        $record->getTable()->getRecordListener()->postSave($event);
+        $record->getTable()->notifyRecordListeners('postSave', $event);
 
         $record->postSave($event);
     }
@@ -320,7 +320,7 @@ class IPF_ORM_Connection_UnitOfWork extends IPF_ORM_Connection_Module
     {
         $event = new IPF_ORM_Event($record, IPF_ORM_Event::RECORD_DELETE);
         $record->preDelete($event);
-        $record->getTable()->getRecordListener()->preDelete($event);
+        $record->getTable()->notifyRecordListeners('preDelete', $event);
 
         return $event->skipOperation;
     }
@@ -329,7 +329,7 @@ class IPF_ORM_Connection_UnitOfWork extends IPF_ORM_Connection_Module
     {
         $event = new IPF_ORM_Event($record, IPF_ORM_Event::RECORD_DELETE);
         $record->postDelete($event);
-        $record->getTable()->getRecordListener()->postDelete($event);
+        $record->getTable()->notifyRecordListeners('postDelete', $event);
     }
 
     public function saveAll()
@@ -351,7 +351,7 @@ class IPF_ORM_Connection_UnitOfWork extends IPF_ORM_Connection_Module
         $event = new IPF_ORM_Event($record, IPF_ORM_Event::RECORD_UPDATE);
         $record->preUpdate($event);
         $table = $record->getTable();
-        $table->getRecordListener()->preUpdate($event);
+        $table->notifyRecordListeners('preUpdate', $event);
 
         if ( ! $event->skipOperation) {
             $identifier = $record->identifier();
@@ -366,7 +366,7 @@ class IPF_ORM_Connection_UnitOfWork extends IPF_ORM_Connection_Module
             $record->assignIdentifier(true);
         }
 
-        $table->getRecordListener()->postUpdate($event);
+        $table->notifyRecordListeners('postUpdate', $event);
 
         $record->postUpdate($event);
 
@@ -379,7 +379,7 @@ class IPF_ORM_Connection_UnitOfWork extends IPF_ORM_Connection_Module
         $event = new IPF_ORM_Event($record, IPF_ORM_Event::RECORD_INSERT);
         $record->preInsert($event);
         $table = $record->getTable();
-        $table->getRecordListener()->preInsert($event);
+        $table->notifyRecordListeners('preInsert', $event);
 
         if ( ! $event->skipOperation) {
             if ($table->getOption('joinedParents')) {
@@ -392,7 +392,7 @@ class IPF_ORM_Connection_UnitOfWork extends IPF_ORM_Connection_Module
         }
 
         $table->addRecord($record);
-        $table->getRecordListener()->postInsert($event);
+        $table->notifyRecordListeners('postInsert', $event);
         $record->postInsert($event);
 
         return true;
@@ -665,4 +665,4 @@ class IPF_ORM_Connection_UnitOfWork extends IPF_ORM_Connection_Module
 
         return $dataSet;
     }
-}
\ No newline at end of file
+}
index 51c4fb03b9260eb88b12ebd9bd6d0de5fa445e7a..70a17ce95e57d471725a669d757c10a27826ccad 100644 (file)
@@ -26,8 +26,6 @@ class IPF_ORM_Hydrator extends IPF_ORM_Hydrator_Abstract
         $isSimpleQuery = count($this->_queryComponents) <= 1;
         // Holds the resulting hydrated data structure
         $result = array();
-        // Holds hydration listeners that get called during hydration
-        $listeners = array();
         // Lookup map to quickly discover/lookup existing records in the result
         $identifierMap = array();
         // Holds for each component the last previously seen element in the result set
@@ -48,7 +46,6 @@ class IPF_ORM_Hydrator extends IPF_ORM_Hydrator_Abstract
         // Initialize
         foreach ($this->_queryComponents as $dqlAlias => $data) {
             $componentName = $data['table']->getComponentName();
-            $listeners[$componentName] = $data['table']->getRecordListener();
             $identifierMap[$dqlAlias] = array();
             $prev[$dqlAlias] = null;
             $idTemplate[$dqlAlias] = '';
@@ -71,7 +68,7 @@ class IPF_ORM_Hydrator extends IPF_ORM_Hydrator_Abstract
             // Ticket #1115 (getInvoker() should return the component that has addEventListener)
             $event->setInvoker($table);
             $event->set('data', $rowData[$rootAlias]);
-            $listeners[$componentName]->preHydrate($event);
+            $table->notifyRecordListeners('preHydrate', $event);
 
             $index = false;
 
@@ -79,7 +76,7 @@ class IPF_ORM_Hydrator extends IPF_ORM_Hydrator_Abstract
             if ($isSimpleQuery || ! isset($identifierMap[$rootAlias][$id[$rootAlias]])) {
                 $element = $driver->getElement($rowData[$rootAlias], $componentName);
                 $event->set('data', $element);
-                $listeners[$componentName]->postHydrate($event);
+                $table->notifyRecordListeners('postHydrate', $event);
 
                 // do we need to index by a custom field?
                 if ($field = $this->_getCustomIndexField($rootAlias)) {
@@ -113,7 +110,7 @@ class IPF_ORM_Hydrator extends IPF_ORM_Hydrator_Abstract
                 $table = $map['table'];
                 $componentName = $table->getComponentName();
                 $event->set('data', $data);
-                $listeners[$componentName]->preHydrate($event);
+                $table->notifyRecordListeners('preHydrate', $event);
 
                 $parent = $map['parent'];
                 $relation = $map['relation'];
@@ -137,7 +134,7 @@ class IPF_ORM_Hydrator extends IPF_ORM_Hydrator_Abstract
                         if ( ! $indexExists || ! $indexIsValid) {
                             $element = $driver->getElement($data, $componentName);
                             $event->set('data', $element);
-                            $listeners[$componentName]->postHydrate($event);
+                            $table->notifyRecordListeners('postHydrate', $event);
 
                             if ($field = $this->_getCustomIndexField($dqlAlias)) {
                                 if (isset($prev[$parent][$relationAlias][$element[$field]])) {
@@ -165,7 +162,7 @@ class IPF_ORM_Hydrator extends IPF_ORM_Hydrator_Abstract
 
                                                // [FIX] Tickets #1205 and #1237
                         $event->set('data', $element);
-                        $listeners[$componentName]->postHydrate($event);
+                        $table->notifyRecordListeners('postHydrate', $event);
 
                         $prev[$parent][$relationAlias] = $element;
                     }
@@ -271,4 +268,4 @@ class IPF_ORM_Hydrator extends IPF_ORM_Hydrator_Abstract
     {
         return isset($this->_queryComponents[$alias]['map']) ? $this->_queryComponents[$alias]['map'] : null;
     }
-}
\ No newline at end of file
+}
index 0b9ee0c9f93551a0b57e870088a44bb1b194f091..ff9a5cb5d1119ed7a257e2c099c93f7e14a13469 100644 (file)
@@ -503,10 +503,9 @@ class IPF_ORM_Import_Builder
 
     public function buildListener($listener)
     {
-        return PHP_EOL."    ".'$this->addListener(new '.$listener.'());';
+        return PHP_EOL.'    $this->getTable()->listeners[\''.$listener.'\'] = new '.$listener.'();';
     }
 
-
     public function buildAttributes(array $attributes)
     {
         $build = PHP_EOL;
index a0641aa24d1fca5e6be9f8daade2c41ade4f048c..4e64efdd02388c0c87eeb244e19c17c5da7209ff 100644 (file)
@@ -24,7 +24,6 @@ class IPF_ORM_Manager extends IPF_ORM_Configurable implements Countable, Iterato
                         IPF_ORM::ATTR_RESULT_CACHE             => null,
                         IPF_ORM::ATTR_QUERY_CACHE              => null,
                         IPF_ORM::ATTR_LOAD_REFERENCES          => true,
-                        IPF_ORM::ATTR_RECORD_LISTENER          => new IPF_ORM_Record_Listener(),
                         IPF_ORM::ATTR_THROW_EXCEPTIONS         => true,
                         IPF_ORM::ATTR_QUERY_LIMIT              => IPF_ORM::LIMIT_RECORDS,
                         IPF_ORM::ATTR_IDXNAME_FORMAT           => "%s_idx",
index 4cc164a2dbf95f813c2a3f466a3e5a206aa5edd2..93b52af03da14f5a98b4d5e0d6d4f7776f25cc6e 100644 (file)
@@ -572,7 +572,7 @@ abstract class IPF_ORM_Query_Abstract
                 $event = new IPF_ORM_Event($record, $callback['const'], $this, $params);
 
                 $record->$callback['callback']($event);
-                $table->getRecordListener()->$callback['callback']($event);
+                $table->notifyRecordListeners($callback['callback'], $event);
             }
         }
 
index 5dde97ce5d0dd8caa64f8a4d4bc773f47252105e..2bef5075d63894f34875ad766b4b98b297cd7632 100644 (file)
@@ -17,23 +17,6 @@ abstract class IPF_ORM_Record_Abstract extends IPF_ORM_Access
         return $this->_table;
     }
 
-    public function addListener($listener, $name = null)
-    {
-        $this->_table->addRecordListener($listener, $name = null);
-        return $this;
-    }
-
-    public function getListener()
-    {
-        return $this->_table->getRecordListener();
-    }
-
-    public function setListener($listener)
-    {
-        $this->_table->setRecordListener($listener);
-        return $this;
-    }
-
     public function index($name, array $definition = array())
     {
         if ( ! $definition) {
diff --git a/ipf/orm/record/listener.php b/ipf/orm/record/listener.php
deleted file mode 100644 (file)
index 03a31e7..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-class IPF_ORM_Record_Listener implements IPF_ORM_Record_Listener_Interface
-{
-    public function preSerialize(IPF_ORM_Event $event){}
-    public function postSerialize(IPF_ORM_Event $event){}
-    public function preUnserialize(IPF_ORM_Event $event){}
-    public function postUnserialize(IPF_ORM_Event $event){}
-    public function preDqlSelect(IPF_ORM_Event $event){}
-    public function preSave(IPF_ORM_Event $event){}
-    public function postSave(IPF_ORM_Event $event){}
-    public function preDqlDelete(IPF_ORM_Event $event){}
-    public function preDelete(IPF_ORM_Event $event){}
-    public function postDelete(IPF_ORM_Event $event){}
-    public function preDqlUpdate(IPF_ORM_Event $event){}
-    public function preUpdate(IPF_ORM_Event $event){}
-    public function postUpdate(IPF_ORM_Event $event){}
-    public function preInsert(IPF_ORM_Event $event){}
-    public function postInsert(IPF_ORM_Event $event){}
-    public function preHydrate(IPF_ORM_Event $event){}
-    public function postHydrate(IPF_ORM_Event $event){}
-}
\ No newline at end of file
diff --git a/ipf/orm/record/listener/chain.php b/ipf/orm/record/listener/chain.php
deleted file mode 100644 (file)
index 5a86126..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-<?php
-
-class IPF_ORM_Record_Listener_Chain extends IPF_ORM_Access implements IPF_ORM_Record_Listener_Interface
-{
-    protected $_listeners = array();
-
-    public function add($listener, $name = null)
-    {
-        if ( ! ($listener instanceof IPF_ORM_Record_Listener_Interface) &&
-             ! ($listener instanceof IPF_ORM_Overloadable)) {
-            throw new IPF_Exception_ORM("Couldn't add eventlistener. Record listeners should implement either IPF_ORM_Record_Listener_Interface or IPF_ORM_Overloadable");
-        }
-        if ($name === null) {
-            $this->_listeners[] = $listener;
-        } else {
-            $this->_listeners[$name] = $listener;
-        }
-    }
-
-    public function get($key)
-    {
-        if ( ! isset($this->_listeners[$key])) {
-            return null;
-        }
-        return $this->_listeners[$key];
-    }
-
-    public function set($key, $listener)
-    {
-        $this->_listeners[$key] = $listener;
-    }
-
-    public function preSerialize(IPF_ORM_Event $event)
-    {
-        foreach ($this->_listeners as $listener) {
-            $listener->preSerialize($event);
-        }
-    }
-
-    public function postSerialize(IPF_ORM_Event $event)
-    {
-        foreach ($this->_listeners as $listener) {
-            $listener->preSerialize($event);
-        }
-    }
-
-    public function preUnserialize(IPF_ORM_Event $event)
-    {
-        foreach ($this->_listeners as $listener) {
-            $listener->preUnserialize($event);
-        }
-    }
-
-    public function postUnserialize(IPF_ORM_Event $event)
-    {
-        foreach ($this->_listeners as $listener) {
-            $listener->postUnserialize($event);
-        }
-    }
-
-    public function preDqlSelect(IPF_ORM_Event $event)
-    {
-        foreach ($this->_listeners as $listener) {
-            $listener->preDqlSelect($event);
-        }
-    }
-
-    public function preSave(IPF_ORM_Event $event)
-    {
-        foreach ($this->_listeners as $listener) {
-            $listener->preSave($event);
-        }
-    }
-
-    public function postSave(IPF_ORM_Event $event)
-    {
-        foreach ($this->_listeners as $listener) {
-            $listener->postSave($event);
-        }
-    }
-
-    public function preDqlDelete(IPF_ORM_Event $event)
-    {
-        foreach ($this->_listeners as $listener) {
-            $listener->preDqlDelete($event);
-        }
-    }
-
-    public function preDelete(IPF_ORM_Event $event)
-    {
-        foreach ($this->_listeners as $listener) {
-            $listener->preDelete($event);
-        }
-    }
-
-    public function postDelete(IPF_ORM_Event $event)
-    {
-        foreach ($this->_listeners as $listener) {
-            $listener->postDelete($event);
-        }
-    }
-
-    public function preDqlUpdate(IPF_ORM_Event $event)
-    {
-        foreach ($this->_listeners as $listener) {
-            $listener->preDqlUpdate($event);
-        }
-    }
-
-    public function preUpdate(IPF_ORM_Event $event)
-    {
-        foreach ($this->_listeners as $listener) {
-            $listener->preUpdate($event);
-        }
-    }
-
-    public function postUpdate(IPF_ORM_Event $event)
-    {
-        foreach ($this->_listeners as $listener) {
-            $listener->postUpdate($event);
-        }
-    }
-
-    public function preInsert(IPF_ORM_Event $event)
-    {
-        foreach ($this->_listeners as $listener) {
-            $listener->preInsert($event);
-        }
-    }
-
-    public function postInsert(IPF_ORM_Event $event)
-    {
-        foreach ($this->_listeners as $listener) {
-            $listener->postInsert($event);
-        }
-    }
-
-    public function preHydrate(IPF_ORM_Event $event)
-    {
-        foreach ($this->_listeners as $listener) {
-            $listener->preHydrate($event);
-        }
-    }
-
-    public function postHydrate(IPF_ORM_Event $event)
-    {
-        foreach ($this->_listeners as $listener) {
-            $listener->postHydrate($event);
-        }
-    }
-}
diff --git a/ipf/orm/record/listener/interface.php b/ipf/orm/record/listener/interface.php
deleted file mode 100644 (file)
index d3e98aa..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-interface IPF_ORM_Record_Listener_Interface
-{
-    public function preSerialize(IPF_ORM_Event $event);
-    public function postSerialize(IPF_ORM_Event $event);
-    public function preUnserialize(IPF_ORM_Event $event);
-    public function postUnserialize(IPF_ORM_Event $event);
-    public function preSave(IPF_ORM_Event $event);
-    public function postSave(IPF_ORM_Event $event);
-    public function preDelete(IPF_ORM_Event $event);
-    public function postDelete(IPF_ORM_Event $event);
-    public function preUpdate(IPF_ORM_Event $event);
-    public function postUpdate(IPF_ORM_Event $event);
-    public function preInsert(IPF_ORM_Event $event);
-    public function postInsert(IPF_ORM_Event $event);
-    public function preHydrate(IPF_ORM_Event $event);
-    public function postHydrate(IPF_ORM_Event $event);
-}
index 1362af9cd7f0d9107e734026ffcaa8e668e86c46..d4e566e92958a99ab963d84f587073af66a47722 100644 (file)
@@ -45,6 +45,8 @@ class IPF_ORM_Table extends IPF_ORM_Configurable implements Countable
     protected $_invokedMethods = array();
     protected $record;
 
+    public $listeners = array();
+
     public function __construct($name, IPF_ORM_Connection $conn, $initDefinition = false)
     {
         $this->_conn = $conn;
@@ -1416,4 +1418,12 @@ class IPF_ORM_Table extends IPF_ORM_Configurable implements Countable
 
         throw new IPF_ORM_Exception(sprintf('Unknown method %s::%s', get_class($this), $method));
     }
+
+    public function notifyRecordListeners($method, $event)
+    {
+        foreach ($this->listeners as $listener)
+            if (is_callable(array($listener, $method)))
+                $listener->$method($event);
+    }
 }
+
index 8b210e1f6e193c217f70710efd46499f7385fc65..2ff3372a1937cd1ffceb23c75dc5d941cbc14542 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-class IPF_ORM_Template_Listener_Orderable extends IPF_ORM_Record_Listener
+class IPF_ORM_Template_Listener_Orderable
 {
     private $columnName = 'ord';
 
index e416b8c119a24b061ca4fbb64c74ec286cf1c254..eaf0735b01e8f6feceab27b67496634cc49c65f8 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-class IPF_ORM_Template_Listener_Sluggable extends IPF_ORM_Record_Listener
+class IPF_ORM_Template_Listener_Sluggable
 {
     protected $_options = array();
 
@@ -110,4 +110,4 @@ class IPF_ORM_Template_Listener_Sluggable extends IPF_ORM_Record_Listener
 
         return  $slug;
     }
-}
\ No newline at end of file
+}
index 6905d7becdd2d2c13868b67e94f08b974bb42507..b5640670b09ef1744a193f28757e9fce6a2b338f 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-class IPF_ORM_Template_Listener_Timestampable extends IPF_ORM_Record_Listener
+class IPF_ORM_Template_Listener_Timestampable
 {
     protected $_options = array();
     public function __construct(array $options)
@@ -45,4 +45,4 @@ class IPF_ORM_Template_Listener_Timestampable extends IPF_ORM_Record_Listener
             }
         }
     }
-}
\ No newline at end of file
+}
index 2f95bf7d19a51c35a98769cee382dff560075297..d998d1b27f855138c3645429fa27dbc080603d15 100644 (file)
@@ -10,15 +10,10 @@ class IPF_ORM_Template_Orderable extends IPF_ORM_Template
             $this->columnName = $options['name'];
     }
 
-    public function getColumnName()
-    {
-        return $this->columnName;
-    }
-
     public function setTableDefinition()
     {
         $this->hasColumn($this->columnName, 'integer', null, '');
-        $this->addListener(new IPF_ORM_Template_Listener_Orderable($this->columnName));
+        $this->getTable()->listeners['Orderable_'.$this->columnName] = new IPF_ORM_Template_Listener_Orderable($this->columnName);
     }
 }
 
index 6812c696add22699b462089c25e1ace88174aa49..35e5700b6aa5a9b440449ac4862a51ca871983ed 100644 (file)
@@ -30,7 +30,7 @@ class IPF_ORM_Template_Sluggable extends IPF_ORM_Template
             $this->index($this->_options['indexName'], array('fields' => $indexFields,
                                                              'type' => 'unique'));
         }
-        $this->addListener(new IPF_ORM_Template_Listener_Sluggable($this->_options));
+        $this->getTable()->listeners['Sluggable_'.print_r($this->_options, true)] = new IPF_ORM_Template_Listener_Sluggable($this->_options);
     }
 }
 
index aae68140c64c55798df6014e784c00f9503ebf25..9a5b9e75291a05f767b8c2e00be2261110c6e51b 100644 (file)
@@ -28,6 +28,6 @@ class IPF_ORM_Template_Timestampable extends IPF_ORM_Template{
         if( ! $this->_options['updated']['disabled']) {
             $this->hasColumn($this->_options['updated']['name'], $this->_options['updated']['type'], null, $this->_options['updated']['options']);
         }
-        $this->addListener(new IPF_ORM_Template_Listener_Timestampable($this->_options));
+        $this->getTable()->listeners['Timestampable_'.print_r($this->_options, true)] = new IPF_ORM_Template_Listener_Timestampable($this->_options);
     }
-}
\ No newline at end of file
+}