<?php

/* $Id$ */
$doc_dest = '001.xml';
$xw = new XMLWriter();
$xw->openUri($doc_dest);
$xw->startDocument('1.0', 'UTF-8');
$xw->startElement("tag1");
$xw->startComment();
$xw->text('comment');
$xw->endComment();
$xw->writeComment("comment #2");
$xw->endDocument();
// Force to write and empty the buffer
$output_bytes = $xw->flush(true);
echo file_get_contents($doc_dest);
unset($xw);
unlink('001.xml');
?>
===DONE===
 /**
  * @see interface_admin_systemtask::executeTask()
  * @throws class_exception
  * @return string
  */
 public function executeTask()
 {
     if (!class_module_system_module::getModuleByName("pages")->rightEdit()) {
         return $this->getLang("commons_error_permissions");
     }
     //load the page itself
     $objPage = class_module_pages_page::getPageByName($this->getParam("pageExport"));
     if ($objPage !== null) {
         $objSystem = class_module_system_module::getModuleByName("system");
         $objXmlWriter = new XMLWriter();
         $strExportFolder = $this->getParam("exportFolder");
         $strExportPrefix = $this->getParam("exportPrefix");
         if ($strExportFolder == "") {
             $strExportFolder = _realpath_ . _projectpath_ . "/temp";
         } else {
             $strExportFolder = _realpath_ . "/" . $strExportFolder;
         }
         if ($strExportPrefix != "") {
             $strExportPrefix = "_" . $strExportPrefix;
         }
         if (is_dir($strExportFolder)) {
             if (!$objXmlWriter->openUri($strExportFolder . "/" . $strExportPrefix . $objPage->getSystemid() . ".xml")) {
                 throw new class_exception("failed to open export file ", class_exception::$level_ERROR);
             }
             //$objXmlWriter->openMemory();
             $objXmlWriter->setIndent(true);
             $objXmlWriter->startDocument("1.0", "UTF-8");
             $objXmlWriter->startComment();
             $strComment = "\n   Kajona XML export\n";
             $strComment .= "   (c) Kajona, www.kajona.de\n";
             $strComment .= "   Kernel version:  " . $objSystem->getStrVersion() . "\n";
             $strComment .= "   Schema version:  1.0\n";
             $strComment .= "   Export Date:     " . dateToString(new class_date()) . "\n";
             $objXmlWriter->text($strComment);
             $objXmlWriter->endComment();
             $objXmlWriter->startElement("pages");
             $objXmlWriter->startElement("page");
             $objXmlWriter->startElement("metadata");
             $objXmlWriter->startElement("kernelVersion");
             $objXmlWriter->text($objSystem->getStrVersion());
             $objXmlWriter->endElement();
             $objXmlWriter->startElement("systemid");
             $objXmlWriter->text($objPage->getSystemid());
             $objXmlWriter->endElement();
             $objXmlWriter->startElement("previd");
             $objXmlWriter->text($objPage->getPrevId());
             $objXmlWriter->endElement();
             $objXmlWriter->startElement("pagename");
             $objXmlWriter->text($objPage->getStrName());
             $objXmlWriter->endElement();
             //try to load the parent page-name
             $strParentName = "";
             if (validateSystemid($objPage->getPrevId())) {
                 $objParentPage = new class_module_pages_page($objPage->getPrevId());
                 $strParentName = $objParentPage->getStrName();
             }
             $objXmlWriter->startElement("prevname");
             $objXmlWriter->text($strParentName);
             $objXmlWriter->endElement();
             $objXmlWriter->startElement("pageproperties");
             $this->createPageMetadata($objPage->getSystemid(), $objXmlWriter);
             $objXmlWriter->endElement();
             //metadata
             $objXmlWriter->endElement();
             $objXmlWriter->startElement("elements");
             $this->createElementData($objPage->getSystemid(), $objXmlWriter);
             $objXmlWriter->endElement();
             //page
             $objXmlWriter->endElement();
             //pages
             $objXmlWriter->endElement();
             $objXmlWriter->flush();
             //return $objXmlWriter->outputMemory(true);
             return $this->getLang("systemtask_pageexport_success") . $strExportFolder . "/" . $strExportPrefix . $objPage->getSystemid() . ".xml" . "";
         } else {
             throw new class_exception("writing XML: Folder " . $strExportFolder . " does not exist! ", class_exception::$level_ERROR);
         }
     }
     return $this->getLang("systemtask_pageexport_error");
 }
Esempio n. 3
0
function queryAndStreamXML($conditions, $randomize = false, $limit = null)
{
    $beginTime = microtime(true);
    $mysql = connectToMySQL();
    $conditions[] = '`isactive` = 1';
    $query = 'SELECT `edittype`,
				`editid`,
				`comment`,
				`user`,
				`user_edit_count`,
				`user_distinct_pages`,
				`user_warns`,
				`prev_user`,
				UNIX_TIMESTAMP( `user_reg_time` ) AS `user_reg_time_unix`,
				UNIX_TIMESTAMP( `common_page_made_time` ) AS `common_page_made_time_unix`,
				`common_title`,
				`common_namespace`,
				`common_creator`,
				`common_num_recent_edits`,
				`common_num_recent_reversions`,
				`current_minor`,
				UNIX_TIMESTAMP( `current_timestamp` ) AS `current_timestamp_unix`,
				`current_text`,
				UNIX_TIMESTAMP( `previous_timestamp` ) AS `previous_timestamp_unix`,
				`previous_text`,
				`isvandalism`,
				`isactive`,
				`source`,
				UNIX_TIMESTAMP( `updated` ) AS `updated_unix`,
				`reviewers`,
				`reviewers_agreeing` FROM `editset` WHERE ';
    $query .= implode(' AND ', $conditions);
    if ($randomize) {
        $query .= ' ORDER BY RAND()';
    } else {
        if ($randomize === false and ($limit !== null and strpos(',', $limit) === false or $limit === null)) {
            $row = mysql_fetch_assoc(mysql_query('SELECT COUNT(*) as `count` FROM `editset` WHERE ' . implode(' AND ', $conditions)));
            $start = rand(0, $row['count'] - ($limit === null ? 0 : $limit));
            if ($limit !== null and strpos(',', $limit) === false) {
                $limit = $start . ',' . $limit;
            } else {
                $limit = $start . ',18446744073709551615';
            }
        }
    }
    if ($limit !== null) {
        $query .= ' LIMIT ' . $limit;
    }
    $xml = new XMLWriter();
    $xml->openURI('php://output');
    $xml->setIndent(true);
    $xml->startDocument('1.0', 'UTF-8');
    $xml->startElement('WPEditSet');
    $xml->startComment();
    $xml->startElement('EditDB');
    $xml->writeElement('query', $query);
    $xml->writeElement('time', time());
    if (function_exists('posix_uname')) {
        $uname = posix_uname();
        $xml->startElement('uname');
        foreach ($uname as $key => $value) {
            $xml->writeElement($key, $value);
        }
        $xml->endElement();
    }
    if (function_exists('posix_getlogin')) {
        $xml->writeElement('username', posix_getlogin());
    }
    $xml->endElement();
    $xml->endComment();
    $result = mysql_unbuffered_query($query);
    if (!$result) {
        error('MySQL Query Error: ' . mysql_error() . "\n" . 'Query: ' . $query);
    }
    $count = 0;
    while ($row = mysql_fetch_assoc($result)) {
        $xml->startElement('WPEdit');
        $xml->startElement('EditDB');
        $xml->writeElement('isActive', $row['isactive'] ? 'true' : 'false');
        $xml->writeElement('source', $row['source']);
        $xml->writeElement('lastUpdated', $row['updated_unix']);
        $xml->endElement();
        $xml->writeElement('EditType', $row['edittype']);
        $xml->writeElement('EditID', $row['editid']);
        $xml->writeElement('comment', $row['comment']);
        $xml->writeElement('user', $row['user']);
        $xml->writeElement('user_edit_count', $row['user_edit_count']);
        $xml->writeElement('user_distinct_pages', $row['user_distinct_pages']);
        $xml->writeElement('user_warns', $row['user_warns']);
        $xml->writeElement('prev_user', $row['prev_user']);
        $xml->writeElement('user_reg_time', $row['user_reg_time_unix']);
        $xml->startElement('common');
        $xml->writeElement('page_made_time', $row['common_page_made_time_unix']);
        $xml->writeElement('title', $row['common_title']);
        $xml->writeElement('namespace', $row['common_namespace']);
        $xml->writeElement('creator', $row['common_creator']);
        $xml->writeElement('num_recent_edits', $row['common_num_recent_edits']);
        $xml->writeElement('num_recent_reversions', $row['common_num_recent_reversions']);
        $xml->endElement();
        $xml->startElement('current');
        $xml->writeElement('minor', $row['current_minor'] ? 'true' : 'false');
        $xml->writeElement('timestamp', $row['current_timestamp_unix']);
        $xml->writeElement('text', $row['current_text']);
        $xml->endElement();
        $xml->startElement('previous');
        $xml->writeElement('timestamp', $row['previous_timestamp_unix']);
        $xml->writeElement('text', $row['previous_text']);
        $xml->endElement();
        $xml->writeElement('isVandalism', $row['isvandalism'] ? 'true' : 'false');
        $xml->startElement('ReviewInterface');
        $xml->writeElement('reviewers', $row['reviewers']);
        $xml->writeElement('reviewers_agreeing', $row['reviewers_agreeing']);
        $xml->endElement();
        $xml->endElement();
        $count++;
    }
    $xml->writeComment('Generated in ' . (microtime(true) - $beginTime) . ' seconds.  ' . $count . ' entries returned.');
    $xml->endElement();
    $xml->endDocument();
    $xml->flush();
}