Xataface 2.0
Xataface Application Framework
Dataface/XMLTool/default.php
Go to the documentation of this file.
00001 <?php
00002 import('Dataface/XMLTool.php');
00003 class Dataface_XMLTool_default extends Dataface_XMLTool {
00004         var $expanded = false;
00005         function toXML(&$arg){
00006                 $out = array();
00007                 if (  is_a($arg, 'Dataface_Record') ){
00008                         $del = $arg->_table->getDelegate();
00009                         if ( $del and method_exists($del, 'toXML') ){
00010                                 return $del->toXML($arg);
00011                         }
00012                         if ( $del and method_exists($del, 'getXMLHead') ){
00013                                 $out[] = $del->getXMLHead($arg);
00014                         }
00015                         $out[] = '<'.$arg->_table->tablename.' id="'.$this->xmlentities($arg->getId()).'">';
00016                         foreach ( $arg->_table->fields(false, true) as $field ){
00017                                 if ( @$field['vocabulary'] ){
00018                                         $value = ' value="'.$this->xmlentities($arg->val($field['name'])).'"';
00019                                 } else {
00020                                         $value = '';
00021                                 }
00022                                 
00023                                 $out[] = '      <'.$field['name'].$value.'>'.$this->xmlentities($arg->display($field['name'])).'</'.$field['name'].'>';
00024                         }
00025                         
00026                         foreach ( $arg->_table->delegateFields(true) as $f){
00027                                 //echo "here: ".$f['name'];
00028                                 if ( @$f['xml'] ){
00029                                         //echo $f['name'];
00030                                         $out[] = '      <'.$f['name'].'>'.$this->xmlentities($arg->display($f['name'])).'</'.$f['name'].'>';
00031                                 }
00032                         }
00033                         
00034                         if ( $this->expanded ){
00035                         
00036                         
00037                                 $joinTables = array_keys($arg->_table->__join__($arg));
00038                                 foreach ( $joinTables as $jtable ){
00039                                         $out[] = $this->toXML($arg->getJoinRecord($jtable));
00040                                 }
00041                         
00042                         
00043                                 $relationships =& $arg->_table->relationships();
00044                                 foreach ( array_keys($relationships) as $r ){
00045                                         $out[] = '      <'.$r.'>';
00046                                         $rrecords =& $arg->getRelatedRecordObjects($r, 'all');
00047                                         foreach ( $rrecords as $rrecord ){
00048                                                 $relatedTables = array();
00049                                                 $relatedTableRecords = array();
00050                                                 $out[] = '              <related_record>';
00051                                                 //foreach ( $relationships[$r]->_schema['short_columns'] as $col ){
00052                                                 foreach ( $relationships[$r]->fields(true) as $col ){
00053                                                         if ( strpos($col,'.') !== false ) list($tablename,$col) = explode('.', $col);
00054                                                         //$table =& $relationships[$r]->getTable($col);
00055                                                         
00056                                                         $temp =& $rrecord->toRecord($tablename);
00057                                                         if ( !isset($relatedTables[$tablename]) ){
00058                                                                 $relatedTables[$tablename] =& Dataface_Table::loadTable($tablename);
00059                                                                 $relatedTableRecords[$tablename] =& $temp;
00060                                                         }
00061                                                         
00062                                                         $tempField =& $temp->_table->getField($col);
00063                                                         if ( @$tempField['vocabulary'] ){
00064                                                                 $value = ' value="'.$this->xmlentities($temp->val($col)).'"';
00065                                                         } else {
00066                                                                 $value = '';
00067                                                         }
00068                                                         $out[] = '                      <'.$col.$value.'>'.$this->xmlentities($temp->display($col)).'</'.$col.'>';
00069                                                         
00070                                                         
00071                                                         unset($temp);
00072                                                         unset($tempField);
00073                                                         unset($table);
00074                                                 }
00075                                                 foreach (array_keys($relatedTables) as $rtablename){
00076                                                         $joinTables = array_keys($relatedTables[$rtablename]->__join__($relatedTableRecords[$rtablename]));
00077                                                         foreach ( $joinTables as $jtable ){
00078                                                                 $out[] = $this->toXML($relatedTableRecords[$rtablename]->getJoinRecord($jtable));
00079                                                         }
00080                                                         
00081                                                         foreach ( $relatedTableRecords[$rtablename]->_table->delegateFields(true) as $f){
00082                                                                 //echo "here: ".$f['name'];
00083                                                                 if ( @$f['xml'] ){
00084                                                                         //echo $f['name'];
00085                                                                         $out[] = '      <'.$f['name'].'>'.$this->xmlentities($relatedTableRecords[$rtablename]->display($f['name'])).'</'.$f['name'].'>';
00086                                                                 }
00087                                                         }
00088                                                 }
00089                                                 $out[] = '              </related_record>';
00090                                         }
00091                                         unset($rrecords);
00092                                         $out[] = '      </'.$r.'>';
00093                                 }
00094                                 
00095                                 
00096                         
00097                         }
00098                         if ( $del and method_exists($del, 'xmlTail') ){
00099                                 $out[] = $del->xmlTail($arg);
00100                         }
00101                         $out[] = '</'.$arg->_table->tablename.'>';
00102                         return implode("\n", $out);
00103                         
00104                         
00105                 } else if ( is_array($arg) ){
00106                         return implode("\n", array_map(array(&$this, 'toXML'), $arg));
00107                 } else {
00108                         return '';
00109                 }
00110         
00111         }
00112         
00113         function header(){
00114                 
00115                 $out = array();
00116                 $app =& Dataface_Application::getInstance();
00117                 header('Content-type: text/xml; charset='.$app->_conf['oe']);
00118                 $out[] = "<?xml version=\"1.0\"?>";
00119                 $out[] = "<record>";
00120                 return implode("\n", $out);
00121         
00122         }
00123         
00124         function footer(){
00125                 
00126                 return "</record>";
00127         }
00128 }
 All Data Structures Namespaces Files Functions Variables Enumerations