Seditio Source
Root |
./othercms/dotclear-2.22/plugins/importExport/inc/flat/class.flat.export.php
<?php
/**
 * @brief importExport, a plugin for Dotclear 2
 *
 * @package Dotclear
 * @subpackage Plugins
 *
 * @copyright Olivier Meunier & Association Dotclear
 * @copyright GPL-2.0-only
 */
if (!defined('DC_RC_PATH')) {
    return;
}

class
flatExport
{
    private
$con;
    private
$prefix;

    private
$line_reg = ['/\\\\/u', '/\n/u', '/\r/u', '/"/u'];
    private
$line_rep = ['\\\\\\\\', '\n', '\r', '\"'];

    public
$fp;

    public function
__construct($con, $out = 'php://output', $prefix = null)
    {
       
$this->con    = &$con;
       
$this->prefix = $prefix;

        if ((
$this->fp = fopen($out, 'w')) === false) {
            throw new
Exception(__('Unable to create output file.'));
        }
        @
set_time_limit(300);
    }

    public function
__destruct()
    {
        if (
is_resource($this->fp)) {
           
fclose($this->fp);
        }
    }

    public 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);
        }
    }

    public function
exportAll()
    {
       
$tables = $this->getTables();

        foreach (
$tables as $table) {
           
$this->exportTable($table);
        }
    }

    public function
exportTable($table)
    {
       
$req = 'SELECT * FROM ' . $this->con->escapeSystem($this->prefix . $table);

       
$this->export($table, $req);
    }

    public function
getTables()
    {
       
$schema    = dbSchema::init($this->con);
       
$db_tables = $schema->getTables();

       
$tables = [];
        foreach (
$db_tables as $t) {
            if (
$this->prefix) {
                if (
strpos($t, $this->prefix) === 0) {
                   
$tables[] = $t;
                }
            } else {
               
$tables[] = $t;
            }
        }

        return
$tables;
    }

    public function
getLine($rs)
    {
       
$l    = [];
       
$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";
    }
}