Files
oav/dotclear._no/plugins/importExport/inc/flat/class.backupFile.php
2023-03-20 12:18:38 +01:00

133 lines
2.6 KiB
PHP
Executable File

<?php
# -- BEGIN LICENSE BLOCK ---------------------------------------
#
# This file is part of Dotclear 2.
#
# Copyright (c) 2003-2011 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 backupFile
{
protected $fp;
private $line_cols = array();
private $line_name;
private $replacement = array(
'/(?<!\\\\)(?>(\\\\\\\\)*+)(\\\\n)/u' => "\$1\n",
'/(?<!\\\\)(?>(\\\\\\\\)*+)(\\\\r)/u' => "\$1\r",
'/(?<!\\\\)(?>(\\\\\\\\)*+)(\\\\")/u' => '$1"',
'/(\\\\\\\\)/' => '\\'
);
public function __construct($file)
{
if (file_exists($file) && is_readable($file)) {
$this->fp = fopen($file,'rb');
} else {
throw new Exception(__('No file to read.'));
}
}
public function __destruct()
{
if ($this->fp) {
fclose($this->fp);
}
}
public function getLine()
{
if (feof($this->fp)) {
return false;
}
$line = trim(fgets($this->fp));
if (substr($line,0,1) == '[')
{
$this->line_name = substr($line,1,strpos($line,' ')-1);
$line = substr($line,strpos($line,' ')+1,-1);
$this->line_cols = explode(',',$line);
return $this->getLine();
}
elseif (substr($line,0,1) == '"')
{
$line = preg_replace('/^"|"$/','',$line);
$line = preg_split('/(^"|","|"$)/m',$line);
if (count($this->line_cols) != count($line)) {
throw new Exception('Invalid row count');
}
$res = array();
for ($i=0; $i<count($line); $i++) {
$res[$this->line_cols[$i]] =
preg_replace(array_keys($this->replacement),array_values($this->replacement),$line[$i]);
}
return new backupFileItem($this->line_name,$res);
}
else
{
return $this->getLine();
}
}
}
class backupFileItem
{
public $__name;
private $__data = array();
public function __construct($name,$data)
{
$this->__name = $name;
$this->__data = $data;
}
public function f($name)
{
return iconv('UTF-8','UTF-8//IGNORE',$this->__data[$name]);
}
public function __get($name)
{
return $this->f($name);
}
public function __set($n,$v)
{
$this->__data[$n] = $v;
}
public function exists($n)
{
return isset($this->__data[$n]);
}
public function drop()
{
foreach (func_get_args() as $n) {
if (isset($this->__data[$n])) {
unset($this->__data[$n]);
}
}
}
public function substitute($old,$new)
{
if (isset($this->__data[$old])) {
$this->__data[$new] = $this->__data[$old];
unset($this->__data[$old]);
}
}
}
?>