258 lines
7.8 KiB
PHP
258 lines
7.8 KiB
PHP
<?php
|
|
echo "This file is currently not working. Try again in the next version. :) \n";
|
|
exit;
|
|
|
|
define('NSPACE', 'lse');
|
|
define('VERBOSE', FALSE);
|
|
#define('VERBOSE', TRUE);
|
|
|
|
header("Content-type: text/plain");
|
|
require_once 'DB.php';
|
|
require_once "XML/Util.php";
|
|
require_once "XML/Beautifier.php";
|
|
require_once dirname(__FILE__)."/../application/configs/conf.php";
|
|
require_once dirname(__FILE__)."/../application/models/BasicStor.php";
|
|
require_once dirname(__FILE__)."/../application/models/Prefs.php";
|
|
|
|
/* =========================================================== misc functions */
|
|
function ls_restore_processObject($el)
|
|
{
|
|
$res = array(
|
|
'name' => $el->attrs['name']->val,
|
|
'type' => $el->name,
|
|
);
|
|
switch ($res['type']) {
|
|
case 'folder':
|
|
foreach ($el->children as $i => $o) {
|
|
$res['children'][] = ls_restore_processObject($o);
|
|
}
|
|
break;
|
|
default:
|
|
$res['gunid'] = $el->attrs['id']->val;
|
|
break;
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
function ls_restore_checkErr($r, $ln='')
|
|
{
|
|
if (PEAR::isError($r)) {
|
|
echo "ERROR $ln: ".$r->getMessage()." ".$r->getUserInfo()."\n";
|
|
exit;
|
|
}
|
|
}
|
|
|
|
function ls_restore_restoreObject($obj, /*$parid,*/ $reallyInsert=TRUE){
|
|
global $tmpdir, $bs;
|
|
switch ($obj['type']) {
|
|
case "audioClip";
|
|
case "webstream";
|
|
case "playlist";
|
|
$gunid = $obj['gunid'];
|
|
if (is_null($gunid)) {
|
|
break;
|
|
}
|
|
$gunid3 = substr($gunid, 0, 3);
|
|
$mediaFile = "$tmpdir/stor/$gunid3/$gunid";
|
|
# echo "X1 $gunid, $gunid3, $mediaFile\n";
|
|
if (!file_exists($mediaFile)) {
|
|
$mediaFile = NULL;
|
|
}
|
|
$mdataFile = "$tmpdir/stor/$gunid3/$gunid.xml";
|
|
if (!file_exists($mdataFile)) {
|
|
$mdataFile = NULL;
|
|
}
|
|
if ($reallyInsert) {
|
|
if (VERBOSE) {
|
|
echo " creating file {$obj['name']} ...\n";
|
|
}
|
|
$values = array(
|
|
"filename" => $obj['name'],
|
|
"filepath" => $mediaFile,
|
|
"metadata" => $mdataFile,
|
|
"gunid" => $obj['gunid'],
|
|
"filetype" => strtolower($obj['type'])
|
|
);
|
|
$r = StoredFile::Insert($values);
|
|
ls_restore_checkErr($r, __LINE__);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* =============================================================== processing */
|
|
|
|
PEAR::setErrorHandling(PEAR_ERROR_RETURN);
|
|
$CC_DBC = DB::connect($CC_CONFIG['dsn'], TRUE);
|
|
$CC_DBC->setFetchMode(DB_FETCHMODE_ASSOC);
|
|
$bs = new BasicStor();
|
|
$pr = new Prefs($bs);
|
|
|
|
$dbxml = file_get_contents($argv[1]);
|
|
$tmpdir = $argv[2];
|
|
|
|
require_once("$STORAGE_SERVER_PATH/var/XmlParser.php");
|
|
$parser = new XmlParser($dbxml);
|
|
if ($parser->isError()) {
|
|
return PEAR::raiseError(
|
|
"MetaData::parse: ".$parser->getError()
|
|
);
|
|
}
|
|
$xmlTree = $parser->getTree();
|
|
|
|
|
|
/* ----------------------------------------- processing storageServer element */
|
|
$subjArr = FALSE;
|
|
//$tree = FALSE;
|
|
foreach ($xmlTree->children as $i => $el) {
|
|
switch ($el->name) {
|
|
case "subjects":
|
|
if ($subjArr !== FALSE) {
|
|
echo "ERROR: unexpected subjects element\n";
|
|
}
|
|
$subjArr = $el->children;
|
|
break;
|
|
// case "folder":
|
|
// if ($tree !== FALSE) {
|
|
// echo "ERROR: unexpected folder element\n";
|
|
// }
|
|
// $tree = ls_restore_processObject($el);
|
|
// break;
|
|
default:
|
|
echo "ERROR: unknown element name {$el->name}\n";
|
|
exit;
|
|
}
|
|
// echo "{$el->name}\n";
|
|
}
|
|
|
|
/* ---------------------------------------------- processing subjects element */
|
|
$subjects = array();
|
|
$groups = array();
|
|
foreach ($subjArr as $i => $el) {
|
|
switch ($el->name) {
|
|
case "group":
|
|
$grname = $el->attrs['name']->val;
|
|
$groups[$grname] = $el->children;
|
|
$subjects[$grname] = array(
|
|
'type' => 'group',
|
|
);
|
|
break;
|
|
case "user":
|
|
$login = $el->attrs['login']->val;
|
|
$subjects[$login] = array(
|
|
'type' => 'user',
|
|
'pass' => $el->attrs['pass']->val,
|
|
# 'realname' => $el->attrs['realname']->val,
|
|
'realname' => '',
|
|
'prefs' => (isset($el->children[0]) ? $el->children[0]->children : NULL),
|
|
);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* -------------------------------------------------------- processing groups */
|
|
foreach ($groups as $grname => $group) {
|
|
foreach ($group as $i => $el) {
|
|
switch ($el->name) {
|
|
case "member":
|
|
$groups[$grname][$i] = $el->attrs['name']->val;
|
|
break;
|
|
case "preferences":
|
|
$subjects[$grname]['prefs'] = $el->children;
|
|
unset($groups[$grname][$i]);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
#var_dump($xmlTree);
|
|
#var_dump($subjArr);
|
|
#var_dump($groups);
|
|
#var_dump($subjects);
|
|
#var_dump($tree);
|
|
|
|
#exit;
|
|
|
|
/* ================================================================ restoring */
|
|
|
|
if (VERBOSE) {
|
|
echo " resetting storage ...\n";
|
|
}
|
|
$bs->resetStorage(FALSE);
|
|
$storId = $bs->storId;
|
|
|
|
/* ------------------------------------------------------- restoring subjects */
|
|
foreach ($subjects as $login => $subj) {
|
|
$uid0 = Subjects::GetSubjId($login);
|
|
ls_restore_checkErr($uid0);
|
|
switch ($subj['type']) {
|
|
case "user":
|
|
if ($login=='root') {
|
|
$r = $bs->passwd($login, NULL, $subj['pass'], TRUE);
|
|
ls_restore_checkErr($r, __LINE__);
|
|
$uid = $uid0;
|
|
} else {
|
|
if (!is_null($uid0)) {
|
|
$r = $bs->removeSubj($login);
|
|
ls_restore_checkErr($r, __LINE__);
|
|
}
|
|
if (VERBOSE) {
|
|
echo " adding user $login ...\n";
|
|
}
|
|
$uid = BasicStor::addSubj($login, $subj['pass'], $subj['realname'], TRUE);
|
|
ls_restore_checkErr($uid, __LINE__);
|
|
}
|
|
break;
|
|
case "group":
|
|
if (!is_null($uid0)) {
|
|
$r = $bs->removeSubj($login);
|
|
if (PEAR::isError($r)) {
|
|
$uid = $uid0;
|
|
break;
|
|
}
|
|
//ls_restore_checkErr($r, __LINE__);
|
|
}
|
|
if (VERBOSE) {
|
|
echo " adding group $login ...\n";
|
|
}
|
|
$uid = BasicStor::addSubj($login, NULL);
|
|
ls_restore_checkErr($uid, __LINE__);
|
|
// var_export($uid); echo " ";
|
|
break;
|
|
} // switch
|
|
|
|
// echo "$login/$uid :\n";
|
|
if (isset($subj['prefs'])) {
|
|
// var_dump($subj['prefs']); exit;
|
|
foreach ($subj['prefs'] as $i => $el) {
|
|
switch ($el->name) {
|
|
case "pref":
|
|
$prefkey = $el->attrs['name']->val;
|
|
$prefval = $el->attrs['val']->val;
|
|
// echo" PREF($prefkey)=$prefval\n";
|
|
$res = $pr->insert($uid, $prefkey, $prefval);
|
|
ls_restore_checkErr($res, __LINE__);
|
|
break;
|
|
default:
|
|
var_dump($el);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* --------------------------------------------------------- restoring groups */
|
|
#var_dump($groups);
|
|
foreach ($groups as $grname => $group) {
|
|
foreach ($group as $i => $login) {
|
|
if (VERBOSE) {
|
|
echo " adding subject $login to group $grname ...\n";
|
|
}
|
|
$r = Subjects::AddSubjectToGroup($login, $grname);
|
|
ls_restore_checkErr($r, __LINE__);
|
|
}
|
|
}
|
|
|
|
/* -------------------------------------------------------- restoring objects */
|
|
ls_restore_restoreObject($tree, /*$storId,*/ FALSE);
|
|
|