<?php
# -- BEGIN LICENSE BLOCK ---------------------------------------
#
# This file is part of importExport, a plugin for DotClear2.
#
# Copyright (c) 2003-2012 Olivier Meunier & Association Dotclear
# Licensed under the GPL version 2.0 license.
# See LICENSE file or
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- END LICENSE BLOCK -----------------------------------------
if (!defined('DC_RC_PATH')) { return; }
class flatExport
{
private $con;
private $prefix;
private $line_reg = array('/\\\\/u', '/\n/u','/\r/u','/"/u');
private $line_rep = array('\\\\\\\\', '\n' ,'\r' ,'\"');
public $fp;
function __construct($con,$out='php://output',$prefix=null)
{
$this->con =& $con;
$this->prefix = $prefix;
if (($this->fp = fopen($out,'w')) === false) {
return false;
}
@set_time_limit(300);
}
function __destruct()
{
if (is_resource($this->fp)) {
fclose($this->fp);
}
}
function export($name,$sql)
{
$rs = $this->con->select($sql);
if (!$rs->isEmpty())
{
fwrite($this->fp,"\n[".$name.' '.implode(',',$rs->columns())."]\n");
while ($rs->fetch()) {
fwrite($this->fp,$this->getLine($rs));
}
fflush($this->fp);
}
}
function exportAll()
{
$tables = $this->getTables();
foreach ($tables as $table)
{
$this->exportTable($table);
}
}
function exportTable($table)
{
$req = 'SELECT * FROM '.$this->con->escapeSystem($this->prefix.$table);
$this->export($table,$req);
}
function getTables()
{
$schema = dbSchema::init($this->con);
$db_tables = $schema->getTables();
$tables = array();
foreach ($db_tables as $t)
{
if ($this->prefix) {
if (strpos($t,$this->prefix) === 0) {
$tables[] = $t;
}
} else {
$tables[] = $t;
}
}
return $tables;
}
function getLine($rs)
{
$l = array();
$cols = $rs->columns();
foreach ($cols as $i => &$c) {
$s = $rs->f($c);
$s = preg_replace($this->line_reg,$this->line_rep,$s);
$s = '"'.$s.'"';
$l[$i] = $s;
}
return implode(',',$l)."\n";
}
}
?>