<?php
 
/**
 
 * @author Thomas Schaefer
 
 * @mail [email protected]
 
*/
 
class SerializeTypedStruct {
 
    
 
    static function toXML(TypedStruct $o, SimpleXMLElement $parent = NULL) {
 
        
 
        if (is_null($parent)) {
 
            $parent = new SimpleXMLElement(sprintf("<?xml version=\"1.0\"?><%s/>", get_class($o)));
 
        }
 
        
 
        foreach ($o->getProperties() as $name => $type) {
 
            
 
            $v = $o->{"get".$name}();
 
            if (is_null($v)) continue;
 
            switch ($type) {
 
                case "bool":
 
                    $parent->addChild($name, (string) ($v)?"true":"false");
 
                    break;
 
                case "integer":
 
                    $parent->addChild($name, (int)$v);
 
                    break;
 
                case "timestamp":
 
                    $parent->addChild($name, gmstrftime("%Y-%m-%dT%H:%M:%SZ", $v));
 
                    break;
 
                case "string":
 
                    $parent->addChild($name, $v);
 
                    break;
 
            }
 
        }
 
        
 
        return $parent->asXML();
 
    }
 
    
 
    static function sqlInsert(TypedStruct $o, $table) {
 
        $fields = array();
 
        $values = array();
 
        
 
        foreach ($o->getProperties() as $name => $type) {
 
            
 
            $v = $o->{"get".$name}();
 
            if (is_null($v)) continue;
 
            
 
            $fields[] = $name;
 
            
 
            switch ($type) {
 
                case "integer":
 
                    $values[] = is_null($v) ? "NULL" : (int)$v;
 
                    break;
 
                case "bool":
 
                    $values[] = is_null($v) ? "NULL" : (bool)$v;
 
                    break;
 
                case "timestamp":
 
                    $values[] = is_null($v) ? "NULL" : gmstrftime('"%Y-%m-%d %H:%M:%S"', $v);
 
                    break;
 
                case "string":
 
                    $values[] = is_null($v) ? "NULL" : addslashes($v);
 
                    break;
 
            }
 
        }
 
        
 
        return sprintf('INSERT INTO %s (%s) VALUES (%s)',
 
            $table,
 
            join($fields, ","),
 
            join($values, ",")
 
            );
 
    }
 
    
 
}
 
 
 |