Thread: [Logicampus-cvs] logicampus/src/logicreate/services/classmgr restoreBackup.lcp, NONE, 1.1
Brought to you by:
trilexcom
From: Mark K <har...@us...> - 2008-03-02 19:22:37
|
Update of /cvsroot/logicampus/logicampus/src/logicreate/services/classmgr In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv24277 Added Files: restoreBackup.lcp Log Message: adding restore file. --- NEW FILE: restoreBackup.lcp --- <? include_once(LIB_PATH.'PBDO/LobRepoEntry.php'); include_once(LIB_PATH.'PBDO/LobMetadata.php'); include_once(LIB_PATH.'PBDO/LobUserLink.php'); include_once(LIB_PATH.'PBDO/LobContent.php'); include_once(LIB_PATH.'PBDO/LobActivity.php'); include_once(LIB_PATH.'PBDO/LobTest.php'); include_once(LIB_PATH.'lob/lc_lob.php'); include_once(LIB_PATH.'lob/lc_lob_xml.php'); include_once(LIB_PATH.'lesson/lc_lesson_xml.php'); /** * Learning Object Repository */ class RestoreBackup extends FacultyService { var $presentor='htmlPresentation'; var $sectionTitle = 'Classroom Manager'; var $navlinks = array ( ''=>'' ); /** * Display a form to upload the backup ZIP archive. */ function run(&$db,&$u,&$lc,&$t) { $lc->templateName='restoreBackup_main'; } /** * Extract the uploaded zip file, display the contents and ask for confirmation. */ function confirmUploadRun(&$db,&$u,&$lc,&$t) { if ($lc->uploads['lobxml']['error']) { $this->presentor = 'errorMessage'; $t['message'] = "There was a problem with the upload."; return false; } $tempdir = $this->tempdir('/tmp', 'campus'); $this->tempdir = $tempdir; //debug($tempdir); //exit(); //$za = zip_open($lc->uploads['lobxml']['tmp_name']); //debug($za); exec('unzip -d '. $tempdir.' '.$lc->uploads['lobxml']['tmp_name'] ); $doc = new DomDocument('1.0', 'UTF-8'); $doc->substituteEntities=false; $doc->resolveExternals=false; $doc->preserveWhiteSpace=true; $doc->validateOnParse=false; if (!$doc->load( $tempdir."/learningobjects.xml") ) { $this->presentor = 'errorMessage'; $t['message'] ="This file does not seem to be a proper backup file. (cannot find learningobjects.xml)"; $this->cleanupDir(); return false; } $root = $doc->childNodes; //get the "lobcol" node $collectionNode = $root->item(1); $lobNodes = $collectionNode->getElementsByTagnameNS('http://logicampus.sourceforge.net/2006/learning_object','obj'); $t['lob_material'] = array(); $t['lob_test'] = array(); $t['lob_activity'] = array(); for ($xidx = 0; $xidx < $lobNodes->length; $xidx++) { $node = $lobNodes->item($xidx); if ($node->nodeType == XML_TEXT_NODE) { continue; } $lobSub = null; $lobRepoObj = Lc_Lob_Xml::parseNode($node, $tempdir); if ($lobRepoObj->lobType == 'content') { $t['lob_material'][] = $lobRepoObj; } if ($lobRepoObj->lobType == 'activity') { $t['lob_activity'][] = $lobRepoObj; } if ($lobRepoObj->lobType == 'test') { $t['lob_test'][] = $lobRepoObj; } } $lessonNodes = $collectionNode->getElementsByTagnameNS('http://logicampus.sourceforge.net/2006/learning_object','lesson'); $t['lesson_list'] = array(); for ($xidx = 0; $xidx < $lobNodes->length; $xidx++) { $lessonObj = Lc_Lesson_Xml::parseNode($node); $t['lesson_list'][] = $lessonObj; } $u->addSessionMessage('Successfully added content.'); $u->sessionvars['restore_dir'] = $tempdir; } /** * read the temporary directory from the session and complete the import of the backup file. */ function handleUploadRun(&$db,&$u,&$lc,&$t) { $tempdir = $u->sessionvars['restore_dir']; $doc = new DomDocument('1.0', 'UTF-8'); $doc->substituteEntities=false; $doc->resolveExternals=false; $doc->preserveWhiteSpace=true; $doc->validateOnParse=false; if (!$doc->load( $tempdir."/learningobjects.xml") ) { $this->presentor = 'errorMessage'; $t['message'] ="This file does not seem to be a proper backup file. (cannot find learningobjects.xml)"; $this->cleanupDir(); return false; } $root = $doc->childNodes; //get the "lobcol" node $collectionNode = $root->item(1); $this->cleanupDir(); } /** * Erase /tmp/campus* and the session varaible "restore_dir" */ function cleanupDir() { $tempdir = $u->sessionvars['restore_dir']; unset($u->sessionvars['restore_dir']); unlink($tempdir.'/learningobjects.xml'); rmdir($tempdir.'/content'); rmdir($tempdir); } /** * return a lob content sub-object */ function makeContentNode($n) { $result = $n->getElementsByTagname('content'); $textContent = $result->item(0); $lobSub = new LobContent(); $lobSub->lobText = $textContent->nodeValue; return $lobSub; } /** * return a lob activity sub-object */ function makeActivityNode($n) { $result = $n->getElementsByTagname('response'); $responseNode = $result->item(0); $lobSub = new LobActivity(); switch($resposneNode->nodeValue) { case 'upload': $lobSub->responseTypeId = 1; break; case 'text': $lobSub->responseTypeId = 2; break; case 'uploadandtext': $lobSub->responseTypeId = 3; break; case 'forum': $lobSub->responseTypeId = 4; break; case 'none': $lobSub->responseTypeId = 5; break; case 'audio': $lobSub->responseTypeId = 6; break; default: $lobSub->responseTypeId = 5; } return $lobSub; } /** * return a lob object */ function makeRepoNode($n) { $result = $n->getElementsByTagname('type'); $type = $result->item(0); /* print_r($type); echo "new lob: <br/>"; // debug($type); echo $type->nodeValue; echo "\n<br/>"; echo "name lob: <br/>"; echo $type->tagName; echo "<br/>"; // */ $children = $type->childNodes; $content = ''; if ($children->length) { $content = trim($children->item(0)->nodeValue); $guid = $n->getAttribute('guid'); $dbid = $n->getAttribute('dbid'); } else { die ('unknown class: '. get_class($type)); return null; } $lob = null; $lob = new LobRepoEntry(); $lob->set('lobGuid',$guid); switch ($content) { case 'content': $lob->set('lobType','content'); break; case 'activity': $lob->set('lobType','activity'); break; case 'test': $lob->set('lobType','test'); break; } if ($lob->lobType == '') { return null; die ('unknown type '. $content); } $result = $n->getElementsByTagname('title'); $node = $result->item(0); $children = $node->childNodes; $lob->set('lobTitle', trim($children->item(0)->nodeValue) ); $result = $n->getElementsByTagname('content'); $node = $result->item(0); if (is_object($node) ){ $children = $node->childNodes; $lob->set('lobContent', trim($children->item(0)->nodeValue) ); } $result = $n->getElementsByTagname('filename'); $node = $result->item(0); if (is_object($node) ){ $children = $node->childNodes; $lob->set('lobFilename', trim($children->item(0)->nodeValue) ); $urlTitle = Lc_Lob_Util::createLinkText(trim($children->item(0)->nodeValue)); $lob->set('lobUrltitle', $urlTitle ); $lob->set('lobBinary', file_get_contents($this->tempdir.'/content/'.trim($children->item(0)->nodeValue)) ); } else { $urlTitle = Lc_Lob_Util::createLinkText(trim( $lob->get('lobTitle')) ); $lob->set('lobUrltitle', $urlTitle ); } $result = $n->getElementsByTagname('description'); $node = $result->item(0); if (is_object($node) ){ $children = $node->childNodes; $lob->set('lobDescription', trim($children->item(0)->nodeValue) ); } $result = $n->getElementsByTagname('subtype'); $node = $result->item(0); if (is_object($node) ){ $children = $node->childNodes; $lob->set('lobSubType', trim($children->item(0)->nodeValue) ); } $result = $n->getElementsByTagname('mime'); $node = $result->item(0); if (is_object($node) ){ $children = $node->childNodes; $lob->set('lobMime', trim($children->item(0)->nodeValue) ); } return $lob; // debug($children); } /** * return a lob metadata object */ function processLobMeta($n) { $result = $n->getElementsByTagname('metadata'); $meta = $result->item(0); $children = $meta->childNodes; $lob = null; $lob = new LobMetadata(); foreach($children as $childNode) { if ($childNode->nodeType == XML_TEXT_NODE) { continue; } $tag = $childNode->tagName; $subchild = $childNode->childNodes; $lob->set($tag, trim($subchild->item(0)->nodeValue) ); } /* $result = $n->getElementsByTagname('lobtitle'); $node = $result->item(0); $children = $node->childNodes; $lob->set('lobTitle', trim($children->item(0)->nodeValue) ); $result = $n->getElementsByTagname('lobcontent'); $node = $result->item(0); if (is_object($node) ){ $children = $node->childNodes; $lob->set('lobContent', trim($children->item(0)->nodeValue) ); } $result = $n->getElementsByTagname('lobfilename'); $node = $result->item(0); if (is_object($node) ){ $children = $node->childNodes; $lob->set('lobFilename', trim($children->item(0)->nodeValue) ); $lob->set('lobUrltitle', urlencode(trim($children->item(0)->nodeValue)) ); } else { $urltitle = $lob->get('lobTitle'); $urltitle = str_replace(' ', '_', $urltitle); $urltitle = urlencode($urltitle); $lob->set('lobUrltitle', $urltitle ); } $result = $n->getElementsByTagname('lobdescription'); $node = $result->item(0); if (is_object($node) ){ $children = $node->childNodes; $lob->set('lobDescription', trim($children->item(0)->nodeValue) ); } $result = $n->getElementsByTagname('subtype'); $node = $result->item(0); if (is_object($node) ){ $children = $node->childNodes; $lob->set('lobSubType', trim($children->item(0)->nodeValue) ); } */ return $lob; } function tempdir($dir, $prefix='', $mode=0700) { if (substr($dir, -1) != '/') $dir .= '/'; do { $path = $dir.$prefix.mt_rand(0, 9999999); } while (!mkdir($path, $mode)); return $path; } } ?> |