function outputBackupXML($args) { global $version, $db_prefix; // An array of serializer options $serializer_options = array( "addDecl" => true, "encoding" => "UTF8", "indent" => " ", "rootName" => "murrix_xml", "defaultTagName" => "container"); // Instantiate the serializer with the options $Serializer = &new XML_Serializer($serializer_options); $list = array(); $list['version'] = $version; $list['created'] = date("Y-m-d H:i:s"); $node_id = $_SESSION['murrix']['root_id']; if (isset($args['node_id'])) $node_id = $args['node_id']; if (isset($args['name'])) $list['name'] = $args['name']; else $list['name'] = "Unnamed MURRiX XML"; if (isset($args['description'])) $list['description'] = $args['description']; // fetch classes $vars_table = new mTable("vars"); $node_table = new mTable("nodes"); $links_table = new mTable("links"); $initial_meta_table = new mTable("initial_meta"); $class_list = array(); $node_list = array(); $link_list = array(); $used_classes = array(); $used_node_ids = array(); $node_ids = getNodeIdTree($node_id); foreach ($node_ids as $node_id) { $used_node_ids[] = $node_id; $latest_obj = new mObject($node_id); $node = array(); $node['xmldata'] = "node"; $node['id'] = $node_id; $node['rights'] = $latest_obj->getRights(); $node['metadata'] = array(); $metadata = $latest_obj->getAllMeta(); foreach ($metadata as $meta) $node['metadata'][$meta['name']] = $meta['value']; $node['objects'] = array(); $versions = fetch("FETCH object WHERE property:node_id='$node_id' NODESORTBY property:version,property:name"); foreach ($versions as $version) { $object = array(); $object['xmldata'] = "object"; $user = $version->getUser(); $object['user'] = $user->username; $object['language'] = $version->getLanguage(); $object['icon'] = $version->icon; $object['name'] = $version->getName(); $object['class_name'] = $version->getClassName(); $object['version'] = $version->getVersion(); $object['created'] = $version->getCreated(); foreach ($version->vars as $key => $var) { $object['variables'][$key]['type'] = $var->getType(); $object['variables'][$key]['value'] = htmlentities($var->getValue(true)); switch ($object['variables'][$key]['type']) { case "file": $object['variables'][$key]['fileid'] = $var->getId(); break; case "thumbnail": $thumb = new mThumbnail($var->getValue(true)); $object['variables'][$key]['fileid'] = $thumb->getId(); break; } } $node['objects'][] = $object; if (!in_array($version->getClassName(), $used_classes)) { $class = array(); $class['xmldata'] = "class"; $class['name'] = $version->getClassName(); $class['icon'] = $version->getIcon(true); $vars = $vars_table->get("`class_name`='".$version->getClassName()."'"); foreach ($vars as $var) { $class['variables'][$var['name']]['priority'] = $var['priority']; $class['variables'][$var['name']]['type'] = $var['type']; $class['variables'][$var['name']]['required'] = $var['required']; $class['variables'][$var['name']]['extra'] = $var['extra']; $class['variables'][$var['name']]['comment'] = $var['comment']; } $initial_meta = $initial_meta_table->get("`class_name`='".$version->getClassName()."'"); foreach ($initial_meta as $meta) $class['metadata'][$meta['name']] = $meta['value']; $class_list[] = $class; $used_classes[] = $version->getClassName(); } } $node_list[] = $node; } $links = $links_table->get(); foreach ($links as $link) { if (in_array($link['node_top'], $used_node_ids) && in_array($link['node_bottom'], $used_node_ids)) { $link2 = array(); $link2['xmldata'] = "link"; $link2['type'] = $link['type']; $link2['node_top'] = $link['node_top']; $link2['node_bottom'] = $link['node_bottom']; $link_list[] = $link2; } } $list = array_merge($list, $class_list, $node_list, $link_list); // Serialize the data structure $status = $Serializer->serialize($list); // Check whether serialization worked if (PEAR::isError($status)) die($status->getMessage()); // Display the XML document header("Content-type: application/force-download"); header("Content-Description: File Transfer"); header("Content-Disposition: attachment; filename=\"".date("ymd-Hi")."-murrix-export.xml.bz2\""); header("Content-type: application/x-bzip2"); echo bzcompress($Serializer->getSerializedData(), 9); }