PlFlagset and PlDBTableEntry are exportable.
authorFlorent Bruneau <florent.bruneau@polytechnique.org>
Fri, 5 Nov 2010 20:50:42 +0000 (21:50 +0100)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Fri, 5 Nov 2010 20:50:42 +0000 (21:50 +0100)
Signed-off-by: Florent Bruneau <florent.bruneau@polytechnique.org>
classes/pldbtableentry.php
classes/plflagset.php

index cbeb7bf..466a4ff 100644 (file)
@@ -170,7 +170,7 @@ interface PlDBTableFieldValidator
     public function __construct(PlDBTableField $field, $value);
 }
 
-interface PlDBTableFieldFormatter extends PlDBTableFieldValidator, XDBFormat
+interface PlDBTableFieldFormatter extends PlDBTableFieldValidator, XDBFormat, PlExportable
 {
 }
 
@@ -196,13 +196,18 @@ class DateFieldFormatter implements PlDBTableFieldFormatter
 
     public function format()
     {
-        return XDB::escape($this->datetime->format($this->storageFormat));
+        return XDB::escape($this->export());
     }
 
     public function date($format)
     {
         return $this->datetime->format($format);
     }
+
+    public function export()
+    {
+        return $this->datetime->format($this->storageFormat);
+    }
 }
 
 class JSonFieldFormatter implements PlDBTableFieldFormatter, ArrayAccess
@@ -233,6 +238,11 @@ class JSonFieldFormatter implements PlDBTableFieldFormatter, ArrayAccess
         return XDB::escape(json_encode($this->data));
     }
 
+    public function export()
+    {
+        return $this->data;
+    }
+
     public function offsetExists($offset)
     {
         return isset($this->data[$offset]);
@@ -535,13 +545,26 @@ class PlDBTable
                                                                   $allowIncomplete));
     }
 
+    public function exportEntry(PlDBTableEntry $entry)
+    {
+        $export = array();
+        foreach ($this->schema as $key=>$field) {
+            $value = $entry->$key;
+            if ($value instanceof PlExportable) {
+                $value = $value->export();
+            }
+            $export[$key] = $value;
+        }
+        return $export;
+    }
+
     public static function get($name)
     {
         return new PlDBTable($name);
     }
 }
 
-class PlDBTableEntry extends PlAbstractIterable
+class PlDBTableEntry extends PlAbstractIterable implements PlExportable
 {
     private $table;
     private $changed;
@@ -744,6 +767,11 @@ class PlDBTableEntry extends PlAbstractIterable
         }
         return $this->table->deleteEntry($this, true);
     }
+
+    public function export()
+    {
+        return $this->table->exportEntry($this);
+    }
 }
 
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
index 6e5a039..7957075 100644 (file)
@@ -21,7 +21,7 @@
 
 /** class for describing flags
  */
-class PlFlagSet extends PlAbstractIterable implements XDBFormat
+class PlFlagSet extends PlAbstractIterable implements XDBFormat, PlExportable
 {
     /** string that holds the PlFlagSet */
     private $values = array();
@@ -128,6 +128,18 @@ class PlFlagSet extends PlAbstractIterable implements XDBFormat
         return $flags;
     }
 
+    /** export the PlFlagSet
+     */
+    public function export()
+    {
+        $array = array();
+        foreach ($this->values as $key=>$value) {
+            if ($value) {
+                $array[] = $key;
+            }
+        }
+        return $array;
+    }
 
     /** format for XDB
      */
@@ -141,13 +153,7 @@ class PlFlagSet extends PlAbstractIterable implements XDBFormat
      */
     public function iterate()
     {
-        $array = array();
-        foreach ($this->values as $key=>$value) {
-            if ($value) {
-                $array[] = $key;
-            }
-        }
-        return PlIteratorUtils::fromArray($array, 1, true);
+        return PlIteratorUtils::fromArray($this->export(), 1, true);
     }
 }