#!/usr/local/bin/php -q
<?php
/*****************************************************************

	Convert axfiles generated under ariadne b09

****************************************************************/

	function cMkDir($dir) {
		$curr="/";
		$tokens=explode("/", $dir);
		while (list(,$dir)=each($tokens)) {
			if ($dir) {
				$curr.=$dir."/";
				if (!file_exists($curr)) {
					mkdir($curr, 0755);
				}
			}
		}
	}

	$ariadne="../../lib";
	require_once($ariadne."/configs/ariadne.phtml");
	require_once($ariadne."/configs/store.phtml");
	require_once($ariadne."/configs/axstore.phtml");
	require_once($ariadne."/stores/mysqlstore.phtml");
	require_once($ariadne."/stores/axstore.phtml");
	require_once("shared_functions.php");

	if ($argc>2) {
		$axfile=$argv[1];
		$tempdir=tempnam($store_config["files"]."temp", "axconvert");
		if (file_exists($tempdir)) {
			unlink($tempdir);
		}
		mkdir($tempdir, 0777);
		if (!untar($axfile, "", $tempdir)) {
			echo "error ($retvar) $error\n";
		} else {
			if (file_exists($tempdir."/files.tgz")) {
				$files=$tempdir."/files";
				mkdir($files, 0777);
				untar("$tempdir/files.tgz", "", $files);
			}
			if ($error) {
				echo "error ($retvar) $error\n";
			} else {
				if (file_exists($tempdir."/templates.tgz")) {
					$templates=$tempdir."/templates";
					mkdir($templates, 0777);
					untar("$tempdir/templates.tgz", "", $templates);
				}
				if ($error) {
					echo "error ($retvar) $error\n";
				} else {
					$obfp=fopen($tempdir."/objects.data","rb");
					if (!$obfp) {
						echo "error: can not open objects.data\n";
					} else {
						$axdata=fread($obfp, filesize($tempdir."/objects.data"));
						fclose($obfp);
						$axdata=unserialize($axdata);

						$ax_config["database"]=$argv[2];
						$ax_config["writeable"]=true;
						$store=new axstore(".", $ax_config);


						$files_store=$store->get_filestore("files");
						$templates_store=$store->get_filestore("templates");

						while (is_array($axdata->nodes) && (list($key, $id)=each($axdata->nodes))) {
							if (!$objects[$id]) {
								$objects[$id]=true; // object seen
								$object=$axdata->objects[$id];
								$store->save($key, $object["type"], $object["data"], $object["properties"], $object["vtype"]);
								if ($newobject=@current(@$store->call("system.get.phtml", "",
										$store->get($key)))) {

									$newid=$newobject->id;

									if (is_array($newobject->data->pinp)) {
										while (list($type, $templates)=each($newobject->data->pinp)) {
											while (list($template, $languages)=each($templates)) {
												while (list($language, $file)=each($languages)) {
													$newobject->data->pinp[$type][$template][$language]=$newid;
													$newobject->data->templates[$type][$template][$language]=$newid;
													//echo "copy_to_store($tempdir/templates".$file.", $newid,  $type.$template.$language)\n";
													$templates_store->copy_to_store($tempdir."/templates".$file, $newid,  "$type.$template.$language");
												}
											}
										}
									}

									$files_path="$tempdir/files".$key;
									if (file_exists($files_path) && is_dir($files_path) ) {
										$dir=opendir($files_path);
										while ($entry=readdir($dir)) {
											if (!is_dir($files_path.$entry)) {
												if ($entry=="view=") {
													$target="file";
												} else
												if ($entry=="view.thumb=") {
													$target="file.thumb";
												} else {
													$target=$entry;
												}
												//echo "copy_to_store($files_path".$entry.", $newid,  $target)\n";
												$files_store->copy_to_store($files_path.$entry, $newid, $target);
											}
										}
										closedir($dir);
									}

								} else {
									echo "error: could not get saved object ($key)\n";
								}
							}
						}
						$files_store->close();
						$templates_store->close();
					}
				}
			}
			$store->close();
			rm_dir($tempdir);
		}
	} else {
		echo "USAGE: convert_v01_v02 axfile newaxfile\n";
	}
?>
