function exportPDF($a_inst, $a_target_dir, &$expLog) { global $tpl, $lng, $ilCtrl; $a_xml_writer = new ilXmlWriter(); $a_xml_writer->xmlStartTag("ContentObject", array("Type" => "SCORM2004SCO")); $this->exportPDFPrepareXmlNFiles($a_inst, $a_target_dir, $expLog, $a_xml_writer); $a_xml_writer->xmlEndTag("ContentObject"); include_once 'Services/Transformation/classes/class.ilXML2FO.php'; $xml2FO = new ilXML2FO(); $xml2FO->setXSLTLocation('./Modules/Scorm2004/templates/xsl/contentobject2fo.xsl'); $xml2FO->setXMLString($a_xml_writer->xmlDumpMem()); $xml2FO->setXSLTParams(array('target_dir' => $a_target_dir)); $xml2FO->transform(); $fo_string = $xml2FO->getFOString(); $fo_xml = simplexml_load_string($fo_string); $fo_ext = $fo_xml->xpath("//fo:declarations"); $fo_ext = $fo_ext[0]; $results = array(); include_once "./Services/Utilities/classes/class.ilFileUtils.php"; ilFileUtils::recursive_dirscan($a_target_dir . "/objects", $results); if (is_array($results["file"])) { foreach ($results["file"] as $key => $value) { $e = $fo_ext->addChild("fox:embedded-file", "", "http://xml.apache.org/fop/extensions"); $e->addAttribute("src", $results[path][$key] . $value); $e->addAttribute("name", $value); $e->addAttribute("desc", ""); } } $fo_string = $fo_xml->asXML(); $a_xml_writer->_XmlWriter; return $fo_string; }
/** * Return the available custom styles * * @return array An array of strings containing the available custom styles * @access public * @see $_customStyle */ public function getCustomStyles() { $css_path = ilUtil::getStyleSheetLocation("filesystem", "ta.css", "Modules/Test"); $css_path = str_replace("ta.css", "customstyles", $css_path) . "/"; $customstyles = array(); if (is_dir($css_path)) { $results = array(); include_once "./Services/Utilities/classes/class.ilFileUtils.php"; ilFileUtils::recursive_dirscan($css_path, $results); if (is_array($results["file"])) { foreach ($results["file"] as $filename) { if (strpos($filename, ".css")) { array_push($customstyles, $filename); } } } } return $customstyles; }
/** * save object * @access public */ function afterSave($newObj) { if (!$newObj->getStartFile()) { // try to set start file automatically $files = array(); include_once "Services/Utilities/classes/class.ilFileUtils.php"; ilFileUtils::recursive_dirscan($newObj->getDataDirectory(), $files); if (is_array($files["file"])) { $zip_file = null; if (stristr($newObj->getTitle(), ".zip")) { $zip_file = strtolower($newObj->getTitle()); $suffix = strrpos($zip_file, "."); if ($suffix) { $zip_file = substr($zip_file, 0, $suffix); } } $valid = array("index.htm", "index.html", "start.htm", "start.html"); foreach ($files["file"] as $idx => $file) { $chk_file = null; if (stristr($file, ".htm")) { $chk_file = strtolower($file); $suffix = strrpos($chk_file, "."); if ($suffix) { $chk_file = substr($chk_file, 0, $suffix); } } if (in_array($file, $valid) || $chk_file && $zip_file && $chk_file == $zip_file) { $newObj->setStartFile(str_replace($newObj->getDataDirectory() . "/", "", $files["path"][$idx]) . $file); $newObj->update(); break; } } } } // always send a message ilUtil::sendSuccess($this->lng->txt("object_added"), true); ilUtil::redirect("ilias.php?baseClass=ilHTLMEditorGUI&ref_id=" . $newObj->getRefId()); }
/** * processes errorhandling etc for uploaded archive * @param string $tmpFile path and filename to uploaded file * @param string $storageMethod deliverFile or storeUploadedFile * @param boolean $persistentErrorMessage Defines whether sendInfo will be persistent or not */ function processUploadedFile($fileTmp, $storageMethod, $persistentErrorMessage, $a_ass_id) { global $lng, $ilUser; // Create unzip-directory $newDir = ilUtil::ilTempnam(); ilUtil::makeDir($newDir); include_once "Services/Utilities/classes/class.ilFileUtils.php"; try { $processDone = ilFileUtils::processZipFile($newDir, $fileTmp, false); ilFileUtils::recursive_dirscan($newDir, $filearray); foreach ($filearray["file"] as $key => $filename) { $a_http_post_files["name"] = ilFileUtils::utf8_encode($filename); $a_http_post_files["type"] = "other"; $a_http_post_files["tmp_name"] = $filearray["path"][$key] . "/" . $filename; $a_http_post_files["error"] = 0; $a_http_post_files["size"] = filesize($filearray["path"][$key] . "/" . $filename); if ($storageMethod == "deliverFile") { $this->{$storageMethod}($a_http_post_files, $a_ass_id, $ilUser->id, true); } else { if ($storageMethod == "storeUploadedFile") { $this->file_obj->{$storageMethod}($a_http_post_files, true, true); } } } ilExerciseMembers::_writeReturned($this->getId(), $ilUser->id, 1); ilUtil::sendSuccess($this->lng->txt("file_added"), $persistentErrorMessage); } catch (ilFileUtilsException $e) { ilUtil::sendFailure($e->getMessage(), $persistentErrorMessage); } ilUtil::delDir($newDir); return $processDone; }
function exportPDF($a_inst, $a_target_dir, &$expLog) { global $ilBench; $a_xml_writer = new ilXmlWriter(); $a_xml_writer->xmlStartTag("ContentObject", array("Type" => "SCORM2004SCO")); $this->exportXMLMetaData($a_xml_writer); $tree = new ilTree($this->getId()); $tree->setTableNames('sahs_sc13_tree', 'sahs_sc13_tree_node'); $tree->setTreeTablePK("slm_id"); foreach ($tree->getSubTree($tree->getNodeData($tree->getRootId()), true, 'sco') as $sco) { include_once "./Modules/Scorm2004/classes/class.ilSCORM2004Sco.php"; $sco_folder = $a_target_dir . "/" . $sco['obj_id']; ilUtil::makeDir($sco_folder); $node = new ilSCORM2004Sco($this, $sco['obj_id']); $node->exportPDFPrepareXmlNFiles($a_inst, $a_target_dir, $expLog, $a_xml_writer); } if ($this->getAssignedGlossary() != 0) { ilUtil::makeDir($a_target_dir . "/glossary"); include_once "./Modules/Glossary/classes/class.ilObjGlossary.php"; include_once "./Modules/Glossary/classes/class.ilGlossaryExport.php"; $glos = new ilObjGlossary($this->getAssignedGlossary(), false); $glos_export = new ilGlossaryExport($glos, "xml"); $glos->exportXML($a_xml_writer, $glos_export->getInstId(), $a_target_dir . "/glossary", $expLog); } copy('./templates/default/images/icon_attachment_s.png', $a_target_dir . "/icon_attachment_s.png"); $a_xml_writer->xmlEndTag("ContentObject"); include_once 'Services/Transformation/classes/class.ilXML2FO.php'; $xml2FO = new ilXML2FO(); $xml2FO->setXSLTLocation('./Modules/Scorm2004/templates/xsl/contentobject2fo.xsl'); $xml2FO->setXMLString($a_xml_writer->xmlDumpMem()); $xml2FO->setXSLTParams(array('target_dir' => $a_target_dir)); $xml2FO->transform(); $fo_string = $xml2FO->getFOString(); $fo_xml = simplexml_load_string($fo_string); $fo_ext = $fo_xml->xpath("//fo:declarations"); $fo_ext = $fo_ext[0]; $results = array(); include_once "./Services/Utilities/classes/class.ilFileUtils.php"; ilFileUtils::recursive_dirscan($a_target_dir . "/objects", $results); if (is_array($results["file"])) { foreach ($results["file"] as $key => $value) { $e = $fo_ext->addChild("fox:embedded-file", "", "http://xml.apache.org/fop/extensions"); $e->addAttribute("src", $results[path][$key] . $value); $e->addAttribute("name", $value); $e->addAttribute("desc", ""); } } $fo_string = $fo_xml->asXML(); $a_xml_writer->_XmlWriter; return $fo_string; }
/** * unzip file * * @param string $a_file full path/filename * @param boolean $overwrite pass true to overwrite existing files * @static * */ public static function unzip($a_file, $overwrite = false, $a_flat = false) { if (!is_file($a_file)) { return; } // if flat, move file to temp directory first if ($a_flat) { $tmpdir = ilUtil::ilTempnam(); ilUtil::makeDir($tmpdir); copy($a_file, $tmpdir . DIRECTORY_SEPARATOR . basename($a_file)); $orig_file = $a_file; $a_file = $tmpdir . DIRECTORY_SEPARATOR . basename($a_file); $origpathinfo = pathinfo($orig_file); } $pathinfo = pathinfo($a_file); $dir = $pathinfo["dirname"]; $file = $pathinfo["basename"]; // unzip $cdir = getcwd(); chdir($dir); $unzip = PATH_TO_UNZIP; // the following workaround has been removed due to bug // http://www.ilias.de/mantis/view.php?id=7578 // since the workaround is quite old, it may not be necessary // anymore, alex 9 Oct 2012 /* // workaround for unzip problem (unzip of subdirectories fails, so // we create the subdirectories ourselves first) // get list $unzipcmd = "-Z -1 ".ilUtil::escapeShellArg($file); $arr = ilUtil::execQuoted($unzip, $unzipcmd); $zdirs = array(); foreach($arr as $line) { if(is_int(strpos($line, "/"))) { $zdir = substr($line, 0, strrpos($line, "/")); $nr = substr_count($zdir, "/"); //echo $zdir." ".$nr."<br>"; while ($zdir != "") { $nr = substr_count($zdir, "/"); $zdirs[$zdir] = $nr; // collect directories //echo $dir." ".$nr."<br>"; $zdir = substr($zdir, 0, strrpos($zdir, "/")); } } } asort($zdirs); foreach($zdirs as $zdir => $nr) // create directories { ilUtil::createDirectory($zdir); } */ // real unzip if (!$overwrite) { $unzipcmd = ilUtil::escapeShellArg($file); } else { $unzipcmd = "-o " . ilUtil::escapeShellArg($file); } ilUtil::execQuoted($unzip, $unzipcmd); chdir($cdir); // if flat, get all files and move them to original directory if ($a_flat) { include_once "./Services/Utilities/classes/class.ilFileUtils.php"; $filearray = array(); ilFileUtils::recursive_dirscan($tmpdir, $filearray); if (is_array($filearray["file"])) { foreach ($filearray["file"] as $k => $f) { if (substr($f, 0, 1) != "." && $f != basename($orig_file)) { copy($filearray["path"][$k] . $f, $origpathinfo["dirname"] . DIRECTORY_SEPARATOR . $f); } } } ilUtil::delDir($tmpdir); } }
/** * delete object file */ function unzipFile() { global $lng; if (isset($_GET["upfile"])) { $file = basename($_GET["upfile"]); } else { if (!isset($_POST["file"])) { $this->ilias->raiseError($this->lng->txt("no_checkbox"), $this->ilias->error_obj->MESSAGE); } if (count($_POST["file"]) > 1) { $this->ilias->raiseError($this->lng->txt("cont_select_max_one_item"), $this->ilias->error_obj->MESSAGE); } $file = basename($_POST["file"][0]); } $cur_subdir = str_replace(".", "", ilUtil::stripSlashes($_GET["cdir"])); $cur_dir = !empty($cur_subdir) ? $this->main_dir . "/" . $cur_subdir : $this->main_dir; $file = $cur_dir . "/" . ilUtil::stripSlashes($file); if (@is_file($file)) { $cur_files = array_keys(ilUtil::getDir($cur_dir)); if ($this->getAllowDirectories()) { ilUtil::unzip($file, true); } else { ilUtil::unzip($file, true, true); } $new_files = array_keys(ilUtil::getDir($cur_dir)); $diff = array_diff($new_files, $cur_files); if (sizeof($diff)) { if ($this->getAllowDirectories()) { include_once "./Services/Utilities/classes/class.ilFileUtils.php"; $new_files = array(); foreach ($diff as $new_item) { if (is_dir($cur_dir . "/" . $new_item)) { ilFileUtils::recursive_dirscan($cur_dir . "/" . $new_item, $new_files); } } if (is_array($new_files["path"])) { foreach ($new_files["path"] as $idx => $path) { $path = substr($path, strlen($this->main_dir) + 1); $diff[] = $path . $new_files["file"][$idx]; } } } $this->setPerformedCommand("unzip_file", array("name" => substr($file, strlen($this->main_dir) + 1), "added" => $diff)); } } ilUtil::renameExecutables($this->main_dir); $this->ctrl->saveParameter($this, "cdir"); ilUtil::sendSuccess($lng->txt("cont_file_unzipped"), true); $this->ctrl->redirect($this, "listFiles"); }
public function dbImportSco($slm, $sco, $asset = false) { $qtis = array(); $d = ilUtil::getDir($this->packageFolder); foreach ($d as $f) { //continue; if ($f[type] == 'file' && substr($f[entry], 0, 4) == 'qti_') { include_once "./Services/QTI/classes/class.ilQTIParser.php"; include_once "./Modules/Test/classes/class.ilObjTest.php"; $qtiParser = new ilQTIParser($this->packageFolder . "/" . $f[entry], IL_MO_VERIFY_QTI, 0, ""); $result = $qtiParser->startParsing(); $founditems =& $qtiParser->getFoundItems(); // die(print_r($founditems)); foreach ($founditems as $qp) { $newObj = new ilObjTest(0, true); // This creates a lot of invalid repository objects for each question // question are not repository objects (see e.g. table object_data), alex 29 Sep 2009 // $newObj->setType ( $qp ['type'] ); // $newObj->setTitle ( $qp ['title'] ); // $newObj->create ( true ); // $newObj->createReference (); // $newObj->putInTree ($_GET ["ref_id"]); // $newObj->setPermissions ( $sco->getId ()); // $newObj->notify ("new", $_GET["ref_id"], $sco->getId (), $_GET["ref_id"], $newObj->getRefId () ); // $newObj->mark_schema->flush (); $qtiParser = new ilQTIParser($this->packageFolder . "/" . $f[entry], IL_MO_PARSE_QTI, 0, ""); $qtiParser->setTestObject($newObj); $result = $qtiParser->startParsing(); // $newObj->saveToDb (); $qtis = array_merge($qtis, $qtiParser->getImportMapping()); } } } //exit; include_once 'Modules/Scorm2004/classes/class.ilSCORM2004Page.php'; $doc = new SimpleXMLElement($this->imsmanifest->saveXml()); $l = $doc->xpath("/ContentObject/MetaData"); if ($l[0]) { include_once 'Services/MetaData/classes/class.ilMDXMLCopier.php'; $mdxml =& new ilMDXMLCopier($l[0]->asXML(), $slm->getId(), $sco->getId(), $sco->getType()); $mdxml->startParsing(); $mdxml->getMDObject()->update(); } $l = $doc->xpath("/ContentObject/PageObject"); foreach ($l as $page_xml) { $tnode = $page_xml->xpath('MetaData/General/Title'); $page = new ilSCORM2004PageNode($slm); $page->setTitle($tnode[0]); $page->setSLMId($slm->getId()); $page->create(true); ilSCORM2004Node::putInTree($page, $sco->getId(), $target); $pmd = $page_xml->xpath("MetaData"); if ($pmd[0]) { include_once 'Services/MetaData/classes/class.ilMDXMLCopier.php'; $mdxml =& new ilMDXMLCopier($pmd[0]->asXML(), $slm->getId(), $page->getId(), $page->getType()); $mdxml->startParsing(); $mdxml->getMDObject()->update(); } $tnode = $page_xml->xpath("//MediaObject/MediaAlias | //InteractiveImage/MediaAlias"); foreach ($tnode as $ttnode) { include_once './Services/MediaObjects/classes/class.ilObjMediaObject.php'; $OriginId = $ttnode[OriginId]; $medianodes = $doc->xpath("//MediaObject[MetaData/General/Identifier/@Entry='" . $OriginId . "']"); $medianode = $medianodes[0]; if ($medianode) { $media_object = new ilObjMediaObject(); $media_object->setTitle($medianode->MetaData->General->Title); $media_object->setDescription($medianode->MetaData->General->Description); $media_object->create(false); $mmd = $medianode->xpath("MetaData"); if ($mmd[0]) { include_once 'Services/MetaData/classes/class.ilMDXMLCopier.php'; $mdxml =& new ilMDXMLCopier($mmd[0]->asXML(), 0, $media_object->getId(), $media_object->getType()); $mdxml->startParsing(); $mdxml->getMDObject()->update(); } // determine and create mob directory, move uploaded file to directory $media_object->createDirectory(); $mob_dir = ilObjMediaObject::_getDirectory($media_object->getId()); foreach ($medianode->MediaItem as $xMediaItem) { $media_item =& new ilMediaItem(); $media_object->addMediaItem($media_item); $media_item->setPurpose($xMediaItem[Purpose]); $media_item->setFormat($xMediaItem->Format); $media_item->setLocation($xMediaItem->Location); $media_item->setLocationType($xMediaItem->Location[Type]); $media_item->setWidth($xMediaItem->Layout[Width]); $media_item->setHeight($xMediaItem->Layout[Height]); $media_item->setHAlign($xMediaItem->Layout[HorizontalAlign]); $media_item->setCaption($xMediaItem->Caption); $media_item->setTextRepresentation($xMediaItem->TextRepresentation); $nr = 0; // add map areas (external links only) foreach ($xMediaItem->MapArea as $n => $v) { if ($v->ExtLink[Href] != "") { include_once "./Services/MediaObjects/classes/class.ilMapArea.php"; $ma = new ilMapArea(); $map_area = new ilMapArea(); $map_area->setShape($v[Shape]); $map_area->setCoords($v[Coords]); $map_area->setLinkType(IL_EXT_LINK); $map_area->setTitle($v->ExtLink); $map_area->setHref($v->ExtLink[Href]); $media_item->addMapArea($map_area); } } if ($media_item->getLocationType() == "LocalFile") { // $tmp_name = $this->packageFolder."/objects/".$OriginId."/".$xMediaItem->Location; // copy($tmp_name, $mob_dir."/".$xMediaItem->Location); } } // copy whole directory ilUtil::rCopy($this->packageFolder . "/objects/" . $OriginId, $mob_dir); // alex: fixed media import: these lines have been // behind the next curly bracket which makes it fail // when no medianode is given. (id=0 -> fatal error) ilUtil::renameExecutables($mob_dir); $media_object->update(true); $ttnode[OriginId] = "il__mob_" . $media_object->getId(); } } include_once "./Modules/File/classes/class.ilObjFile.php"; include_once "./Services/Utilities/classes/class.ilFileUtils.php"; include_once "./Services/MediaObjects/classes/class.ilObjMediaObject.php"; $intlinks = $page_xml->xpath("//IntLink"); foreach ($intlinks as $intlink) { if ($intlink[Type] != "File") { continue; } $path = $this->packageFolder . "/objects/" . str_replace('dfile', 'file', $intlink[Target]); if (!is_dir($path)) { continue; } $ffiles = array(); ilFileUtils::recursive_dirscan($path, $ffiles); $filename = $ffiles[file][0]; $fileObj = new ilObjFile(); $fileObj->setType("file"); $fileObj->setTitle(ilFileUtils::utf8_encode(ilUtil::stripSlashes($filename))); $fileObj->setFileName(ilFileUtils::utf8_encode(ilUtil::stripSlashes($filename))); // better use this, mime_content_type is deprecated $fileObj->setFileType(ilObjMediaObject::getMimeType($path . "/" . $filename)); $fileObj->setFileSize(filesize($path . "/" . $filename)); $fileObj->create(); $fileObj->createReference(); //$fileObj->putInTree($_GET["ref_id"]); //$fileObj->setPermissions($slm->getId ()); $fileObj->createDirectory(); $fileObj->storeUnzipedFile($path . "/" . $filename, ilFileUtils::utf8_encode(ilUtil::stripSlashes($filename))); $intlink[Target] = "il__dfile_" . $fileObj->getId(); } $fileitems = $page_xml->xpath("//FileItem/Identifier"); foreach ($fileitems as $fileitem) { $path = $this->packageFolder . "/objects/" . $fileitem[Entry]; if (!is_dir($path)) { continue; } $ffiles = array(); ilFileUtils::recursive_dirscan($path, $ffiles); $filename = $ffiles[file][0]; $fileObj = new ilObjFile(); $fileObj->setType("file"); $fileObj->setTitle(ilFileUtils::utf8_encode(ilUtil::stripSlashes($filename))); $fileObj->setFileName(ilFileUtils::utf8_encode(ilUtil::stripSlashes($filename))); // better use this, mime_content_type is deprecated $fileObj->setFileType(ilObjMediaObject::getMimeType($path . "/" . $filename)); $fileObj->setFileSize(filesize($path . "/" . $filename)); $fileObj->create(); $fileObj->createReference(); //$fileObj->putInTree($_GET["ref_id"]); //$fileObj->setPermissions($slm->getId ()); $fileObj->createDirectory(); $fileObj->storeUnzipedFile($path . "/" . $filename, ilFileUtils::utf8_encode(ilUtil::stripSlashes($filename))); $fileitem[Entry] = "il__file_" . $fileObj->getId(); } $pagex = new ilSCORM2004Page($page->getId()); $ddoc = new DOMDocument(); $ddoc->async = false; $ddoc->preserveWhiteSpace = false; $ddoc->formatOutput = false; $ddoc->loadXML($page_xml->asXML()); $xpath = new DOMXPath($ddoc); $tnode = $xpath->query('PageContent'); $t = "<PageObject>"; foreach ($tnode as $ttnode) { $t .= $ddoc->saveXML($ttnode); } $t .= "</PageObject>"; foreach ($qtis as $old => $q) { $t = str_replace($old, 'il__qst_' . $q['pool'], $t); } $pagex->setXMLContent($t); $pagex->updateFromXML(); } }
/** * Recursively scans a given directory and writes path and filename into referenced array * * @author Jan Hippchen * @version 1.6.9.07 * @param string $dir Directory to start from * @param array &$arr Referenced array which is filled with Filename and path */ function recursive_dirscan($dir, &$arr) { global $lng; $dirlist = opendir($dir); while (false !== ($file = readdir($dirlist))) { if (!is_file($dir . "/" . $file) && !is_dir($dir . "/" . $file)) { throw new ilFileUtilsException($lng->txt("filenames_not_supported"), ilFileUtilsException::$BROKEN_FILE); } if ($file != '.' && $file != '..') { $newpath = $dir . '/' . $file; $level = explode('/', $newpath); if (is_dir($newpath)) { ilFileUtils::recursive_dirscan($newpath, $arr); } else { $arr["path"][] = $dir . "/"; $arr["file"][] = end($level); } } } closedir($dirlist); }