header (Default: true) * @return String XML */ public function convertDataObject(DataObjectInterface $obj) { Controller::curr()->getResponse()->addHeader("Content-type", "text/xml"); return "\n" . $this->convertDataObjectWithoutHeader($obj); } public function convertDataObjectWithoutHeader(DataObject $obj) { $className = $obj->class; $id = $obj->ID; $objHref = Director::absoluteURL(self::$api_base . "$obj->class/$obj->ID"); $json = "<$className href=\"$objHref.xml\">\n"; $dbFields = array_merge($obj->databaseFields(), array('ID'=>'Int')); foreach($dbFields as $fieldName => $fieldType) { if(is_object($obj->$fieldName)) { $json .= $obj->$fieldName->toXML(); } else { $json .= "<$fieldName>" . Convert::raw2xml($obj->$fieldName) . "\n"; } } foreach($obj->has_one() as $relName => $relClass) { $fieldName = $relName . 'ID'; if($obj->$fieldName) { $href = Director::absoluteURL(self::$api_base . "$relClass/" . $obj->$fieldName); } else { $href = Director::absoluteURL(self::$api_base . "$className/$id/$relName"); } $json .= "<$relName linktype=\"has_one\" href=\"$href.xml\" id=\"{$obj->$fieldName}\" />\n"; } foreach($obj->has_many() as $relName => $relClass) { $json .= "<$relName linktype=\"has_many\" href=\"$objHref/$relName.xml\">\n"; $items = $obj->$relName(); foreach($items as $item) { //$href = Director::absoluteURL(self::$api_base . "$className/$id/$relName/$item->ID"); $href = Director::absoluteURL(self::$api_base . "$relClass/$item->ID"); $json .= "<$relClass href=\"$href.xml\" id=\"{$item->ID}\" />\n"; } $json .= "\n"; } foreach($obj->many_many() as $relName => $relClass) { $json .= "<$relName linktype=\"many_many\" href=\"$objHref/$relName.xml\">\n"; $items = $obj->$relName(); foreach($items as $item) { $href = Director::absoluteURL(self::$api_base . "$relClass/$item->ID"); $json .= "<$relClass href=\"$href.xml\" id=\"{$item->ID}\" />\n"; } $json .= "\n"; } $json .= ""; return $json; } /** * Generate an XML representation of the given {@link DataObjectSet}. * * @param DataObjectSet $set * @return String XML */ public function convertDataObjectSet(DataObjectSet $set) { Controller::curr()->getResponse()->addHeader("Content-type", "text/xml"); $className = $set->class; $xml = "\n<$className>\n"; foreach($set as $item) { if($item->canView()) $xml .= $this->convertDataObjectWithoutHeader($item); } $xml .= ""; return $xml; } }