/** * Return a recrd as XML. * * In order to control how this is done set the "xml" option in a record. * This option is an array that has the keys "ignore_fields" and "include_relations". Both of these are arrays that list the name of fields/relations to include/process. * * If you want to insert this xml as a part inside another xml send a * SimpleXMLElement to the function. Because of the nature of SimpleXML the * content you add to this element will be avilable after the function is * complete. * * @param Doctrine_Record $record * @param SimpleXMLElement $xml * @return string Xml as string */ public static function getRecordAsXml(Doctrine_Record $record, SimpleXMlElement $incomming_xml = NULL) { $recordname = $record->getTable()->tableName; if (!isset($incomming_xml)) { $new_xml_string = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><" . $recordname . "></" . $recordname . ">"; $xml = new SimpleXMLElement($new_xml_string); } else { $xml = $incomming_xml->addChild($recordname); } foreach ($record->obtainIdentifier() as $pk_field => $pk_value) { $xml->addChild($pk_field, $pk_value); } $xml_options = $record->option("xml"); if (isset($xml_options["record_name"])) { $recordname = $xml_options["record_name"]; } foreach ($record->getData() as $field => $value) { if (isset($xml_options["ignore_fields"]) && !in_array($field, $xml_options["ignore_fields"]) || !isset($xml_options["ignore_fields"])) { if ($value instanceof Doctrine_Null) { $xml->addChild($field); } else { $xml->addChild($field, $value); } } } if (!isset($xml_options["include_relations"])) { return $xml->asXML(); } $relations = $record->getTable()->getRelations(); foreach ($relations as $name => $relation) { if (in_array($name, $xml_options["include_relations"])) { $relation_type = $relation->getType(); $related_records = $record->get($name); if ($relation_type == Doctrine_Relation::ONE && $related_records instanceof Doctrine_Record) { Doctrine_Lib::getRecordAsXml($related_records, $xml); } else { Doctrine_Lib::getCollectionAsXml($related_records, $xml); } } } return $xml->asXML(); }