19 include_once (
"FDL/import_tar.php");
28 $opt[
"analyze"] = (substr(strtolower(getHttpVars(
"analyze",
"N")) , 0, 1) ==
"y");
29 $opt[
"policy"] = getHttpVars(
"policy",
"update");
30 $dbaccess = $action->getParam(
"FREEDOM_DB");
32 if (intval(ini_get(
"max_execution_time")) < 300) ini_set(
"max_execution_time", 300);
34 if (isset($_FILES[
"file"])) {
36 $xmlfiles = $_FILES[
"file"][
'tmp_name'];
38 rename($xmlfiles, $xmlfiles .
".$ext");
47 $splitdir = uniqid(
getTmpDir() .
"/xmlsplit");
49 if (!is_dir($splitdir)) $action->exitError(_(
"Cannot create directory %s for xml import") , $splitdir);
57 system(sprintf(
"/bin/rm -fr %s ", $splitdir));
69 $opt[
"analyze"] = (substr(strtolower(getHttpVars(
"analyze",
"Y")) , 0, 1) ==
"y");
70 $opt[
"policy"] = getHttpVars(
"policy",
"update");
71 $dbaccess = $action->getParam(
"FREEDOM_DB");
73 if (intval(ini_get(
"max_execution_time")) < 300) ini_set(
"max_execution_time", 300);
75 if (isset($_FILES[
"file"])) {
77 $zipfiles = $_FILES[
"file"][
'tmp_name'];
79 rename($zipfiles, $zipfiles .
".$ext");
88 $splitdir = uniqid(
getTmpDir() .
"/xmlsplit");
90 if (!is_dir($splitdir)) $action->exitError(_(
"Cannot create directory %s for xml import") , $splitdir);
98 system(sprintf(
"/bin/rm -fr %s ", $splitdir));
110 if ($handle = opendir($splitdir)) {
111 while (
false !== (
$file = readdir($handle))) {
112 if (
$file[0] !=
"." && is_file(
"$splitdir/$file")) {
113 $ext = substr(
$file, strrpos(
$file,
'.') + 1);
130 if ($handle = opendir($splitdir)) {
131 while (
false !== (
$file = readdir($handle))) {
132 if (
$file[0] !=
".") {
147 static $mediaindex = 0;
150 if (!file_exists(
$file))
return sprintf(_(
"import Xml extract : file %s not found") ,
$file);
152 if (!is_dir(
"$dir/$mediadir")) mkdir(
"$dir/$mediadir");
153 $f = fopen(
$file,
"r");
154 $nf = fopen(
$file .
".new",
"w");
156 $buffer = fgets($f, 4096);
158 if (preg_match(
"/<([a-z_0-9-]+)[^>]*mime=\"[^\"]+\"(.*)>(.*)/", $buffer, $reg)) {
159 if (substr($reg[2], -1) !=
"/") {
161 if (preg_match(
"/<([a-z_0-9-]+)[^>]*title=\"([^\"]+)\"/", $buffer, $regtitle)) {
163 }
else if (preg_match(
"/<([a-z_0-9-]+)[^>]*title='([^']+)'/", $buffer, $regtitle)) {
166 mkdir(sprintf(
"%s/%s/%d",
$dir, $mediadir, $mediaindex));
167 $rfin = sprintf(
"%s/%d/%s", $mediadir, $mediaindex,
$title);
168 $fin = sprintf(
"%s/%s",
$dir, $rfin);
169 $fi = fopen($fin,
"w");
171 if (preg_match(
"/(.*)(<$tag [^>]*)>/", $buffer, $regend)) {
172 fputs($nf, $regend[1] . $regend[2] .
' href="' . $rfin .
'">');
174 if (preg_match(
"/>([^<]*)<\/$tag>(.*)/", $buffer, $regend)) {
176 fputs($fi, $regend[1]);
177 fputs($nf,
"</$tag>");
178 fputs($nf, $regend[2]);
183 while (!feof($f) && (!$findtheend)) {
184 $buffer = fgets($f, 4096);
185 if (preg_match(
"/(.*)<\/$tag>(.*)/", $buffer, $regend)) {
186 fputs($fi, $regend[1]);
187 fputs($nf,
"</$tag>");
188 fputs($nf, $regend[2]);
212 static $families = array();
222 "values" => array() ,
228 if (!is_file($xmlfile)) {
229 $err = sprintf(_(
"Xml import file %s not found") , $xmlfile);
236 if ($opt[
"policy"]) $policy = $opt[
"policy"];
237 if ($opt[
"analyze"] !== null)
$analyze = $opt[
"analyze"];
238 $splitdir = dirname($xmlfile);
242 $prevalues = array();
243 $dom =
new DOMDocument();
245 $ok = @$dom->load($xmlfile);
251 catch(Exception $e) {
252 $log[
"action"] =
'ignored';
253 $log[
"err"] = $e->userInfo;
257 $root = $dom->documentElement;
258 $id = $root->getAttribute(
"id");
259 $name = $root->getAttribute(
"name");
260 $key = $root->getAttribute(
"key");
262 $tkey = explode(
',', $key);
263 foreach ($tkey as & $v) {
270 if (!isset($families[
$famid])) {
274 $la = $families[
$famid]->getNormalAttributes();
282 foreach (
$la as $k => & $v) {
283 $n = $dom->getElementsByTagName($v->id);
285 foreach ($n as $item) {
291 $id = $item->getAttribute(
"id");
293 $name = $item->getAttribute(
"name");
297 if ($item->nodeValue) {
298 $afamid = $v->format;
300 if (!
$id) $msg.= sprintf(_(
"No identificator found for relation %s") .
"\n", $v->id);
304 if ($v->getOption(
"multiple") ==
"yes") {
305 $id = str_replace(
',',
'\n',
$id);
306 if ($v->inArray())
$id = str_replace(array(
316 $href = $item->getAttribute(
"href");
320 $vid = $item->getAttribute(
"vid");
321 $mime = $item->getAttribute(
"mime");
322 $title = $item->getAttribute(
"title");
324 $val[] =
"$mime|$vid|$title";
330 $val[] = str_replace(
"\n",
" ", str_replace(
">\n",
">", $item->nodeValue));
334 $val[] = $item->nodeValue;
340 $tdoc[] = implode(
"\n", $val);
343 if ($msg)
$log[
"err"].=
"\n" . $msg;
349 $ll = exec(sprintf(
"cd %s && unzip %s", $splitdir, $zipfiles) ,
$out, $retval);
350 if ($retval != 0)
$err = sprintf(_(
"export Xml : cannot unzip %s : %s") , $zipfiles, $ll);
355 $f = fopen($xmlfiles,
"r");
356 if (!$f)
return sprintf(_(
"Xml import : Cannot open file %s") , $xmlfiles);
359 while ((!feof($f)) && (!$findfirst)) {
360 $buffer = fgets($f, 4096);
361 if (strpos($buffer,
"<documents") !==
false) {
366 $buffer = fgets($f, 4096);
367 if (preg_match(
"/<([a-z-_0-9]+)/", $buffer, $reg)) {
370 if (preg_match(
"/name=[\"|']([a-z-_0-9]+)[\"|']/", $buffer, $reg)) {
372 }
else if (preg_match(
"/id=[\"|']([0-9]+)[\"|']/", $buffer, $reg)) {
375 $fname = uniqid(
"new");
377 $fxo = $splitdir .
'/' . $fname .
".xml";
378 $xo = fopen($fxo,
"w");
379 if (!$xo)
return sprintf(_(
"Xml import : Cannot create file %s") , $fxo);
380 fputs($xo,
'<?xml version="1.0" encoding="UTF-8"?>' .
"\n");
383 while (!feof($f) && (!$theend)) {
384 $buffer = fgets($f, 4096);
385 if (strpos($buffer,
'</' . $top .
'>') !==
false) {
392 if (strpos($buffer,
"<documents") !==
false) {
402 $tmpdest = uniqid(
getTmpDir() .
"/fdlbin");
403 $chunkSize = 1024 * 30;
405 $dst = fopen($tmpdest,
'wb');
406 while (!feof($src)) {
407 fwrite($dst, base64_decode(fread($src, $chunkSize)));
419 set_error_handler(array(
423 $dom =
new DomDocument();
425 restore_error_handler();
426 $this->message =
"XML Parse Error in $filename";
427 parent::__construct();
432 $pos = strpos($errstr,
"]:");
434 $errstr = substr($errstr, $pos + 2);
436 $this->userInfo.=
"$errstr";