DataObjects/Events.php
[Pman.Core] / DataObjects / Events.php
index fc4367d..d1dba13 100644 (file)
@@ -415,7 +415,7 @@ class Pman_Core_DataObjects_Events extends DB_DataObject
     function beforeUpdate($old, $request,$roo)
     {
         if(!empty($request['_restore'])){
-            $this->restore();
+            $this->restore($roo);
         }
     }
     
@@ -589,4 +589,61 @@ class Pman_Core_DataObjects_Events extends DB_DataObject
         
         return $file;
     }
+    
+    function restore($roo)
+    {
+        $file = $this->retrieveEventLog();
+        
+        if(empty($file) || !file_exists($file)){
+            $roo->jerr('Could not retrieve the event log file');
+        }
+        
+        $log = json_decode(file_get_contents($file), true);
+        
+        if(empty($log['POST']) || empty($log['POST']['_delete']) || empty($log['DELETED_DATAOBJECTS'])){
+            $roo->jerr('Invalid url');
+        }
+        
+        $restored = array();
+        
+        foreach ($log['DELETED_DATAOBJECTS'] as $d){
+            if(
+                    empty($d['id']) || 
+                    empty($d['_table']) || 
+                    (
+                            !empty($restored[$d['_table']]) && 
+                            in_array($d['id'], $restored[$d['_table']])
+                    )
+            ){
+                continue;
+            }
+            
+            if(!isset($restored[$d['_table']])){
+                $restored[$d['_table']] = array();
+            }
+            
+            $restored[$d['_table']][] = $d['id'];
+            
+            $table = DB_DataObject::factory($d['_table']);
+            
+            if (!is_a($table,'DB_DataObject')) {
+                continue;
+            }
+            
+            unset($d['_table']);
+            
+            $table->setFrom($d);
+            
+            /*
+             * need to use the old id
+             */
+            $table->id = $d['id'];
+            
+            $table->sequenceKey(false,false);
+            
+            $table->insert();     
+        }
+        
+        $roo->jok('RESTORE');
+    }
 }