![]() |
Xataface 2.0
Xataface Application Framework
|
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 }
1.7.4