function exportTmxAction() { $defaults = new Ps_AbstractViewModel(); $defaults->class_name = 'Ps_TranslationView'; $defaults->id = Ps_TranslationView::DEFAULT_ID; $view = Ps_AbstractViewLoader::getView(Ps_TranslationView::DEFAULT_ID, $defaults); // Extract every result from the view list($results, $null) = DAO_Translation::search($view->params, -1, 0, SearchFields_Translation::STRING_ID, true, false); // Build TMX outline $xml = simplexml_load_string('<?xml version="1.0" encoding="' . LANG_CHARSET_CODE . '"?>' . '<!DOCTYPE tmx SYSTEM "tmx14.dtd">' . '<tmx version="1.4">' . '<body></body>' . '</tmx>'); /* @var $xml SimpleXMLElement */ $namespaces = $xml->getNamespaces(true); $codes = array(); // Loop translated strings if (is_array($results)) { foreach ($results as $result) { $string_id = $result[SearchFields_Translation::STRING_ID]; $lang_code = $result[SearchFields_Translation::LANG_CODE]; $string_default = $result[SearchFields_Translation::STRING_DEFAULT]; $string_override = $result[SearchFields_Translation::STRING_OVERRIDE]; $codes[$lang_code] = 1; $string = !empty($string_override) ? $string_override : $string_default; // [TODO] Nest multiple <tuv> in a single <tu> parent $eTu =& $xml->body->addChild('tu'); /* @var $eTu SimpleXMLElement */ $eTu->addAttribute('tuid', $string_id); $eTuv =& $eTu->addChild('tuv'); /* @var $eTuv SimpleXMLElement */ $eTuv->addAttribute('xml:lang', $lang_code, 'http://www.w3.org/XML/1998/namespace'); $eSeg =& $eTuv->addChild('seg', htmlspecialchars($string)); /* @var $eSeg SimpleXMLElement */ } } $imp = new DOMImplementation(); // $dtd = $imp->createDocumentType('tmx', '', 'tmx14.dtd'); // $doc = $imp->createDocument("", "", $dtd); $doc = $imp->createDocument("", ""); $doc->encoding = LANG_CHARSET_CODE; $doc->formatOutput = true; $simplexml = dom_import_simplexml($xml); /* @var $dom DOMElement */ $simplexml = $doc->importNode($simplexml, true); $simplexml = $doc->appendChild($simplexml); $filename = "portsensor_lang_" . implode('_', array_keys($codes)) . ".xml"; header("Content-type: text/xml"); header("Content-Disposition: attachment; filename=\"{$filename}\""); echo $doc->saveXML(); }