/**
  * upload file
  */
 function uploadFile()
 {
     global $lng;
     // determine directory
     $cur_subdir = str_replace(".", "", ilUtil::stripSlashes($_GET["cdir"]));
     $cur_dir = !empty($cur_subdir) ? $this->main_dir . "/" . $cur_subdir : $this->main_dir;
     include_once 'Services/FileSystem/classes/class.ilUploadFiles.php';
     if (is_file($_FILES["new_file"]["tmp_name"])) {
         move_uploaded_file($_FILES["new_file"]["tmp_name"], $cur_dir . "/" . ilUtil::stripSlashes($_FILES["new_file"]["name"]));
         if (is_file($cur_dir . "/" . ilUtil::stripSlashes($_FILES["new_file"]["name"]))) {
             ilUtil::sendSuccess($lng->txt("cont_file_created"), true);
             $this->setPerformedCommand("create_file", array("name" => ilUtil::stripSlashes($_FILES["new_file"]["name"])));
         }
     } elseif ($_POST["uploaded_file"]) {
         // check if the file is in the ftp directory and readable
         if (ilUploadFiles::_checkUploadFile($_POST["uploaded_file"])) {
             // copy uploaded file to data directory
             ilUploadFiles::_copyUploadFile($_POST["uploaded_file"], $cur_dir . "/" . ilUtil::stripSlashes($_POST["uploaded_file"]));
         }
         if (is_file($cur_dir . "/" . ilUtil::stripSlashes($_POST["uploaded_file"]))) {
             ilUtil::sendSuccess($lng->txt("cont_file_created"), true);
             $this->setPerformedCommand("create_file", array("name" => ilUtil::stripSlashes($_POST["uploaded_file"])));
         }
     } else {
         if (trim($_FILES["new_file"]["name"]) == "") {
             ilUtil::sendFailure($lng->txt("cont_enter_a_file"), true);
         }
     }
     $this->ctrl->saveParameter($this, "cdir");
     ilUtil::renameExecutables($this->main_dir);
     $this->ctrl->redirect($this, "listFiles");
 }
 function newModuleVersionUpload()
 {
     global $_FILES, $rbacsystem;
     $unzip = PATH_TO_UNZIP;
     $tocheck = "imsmanifest.xml";
     include_once 'Services/FileSystem/classes/class.ilUploadFiles.php';
     // check create permission before because the uploaded file will be copied
     if (!$rbacsystem->checkAccess("write", $_GET["ref_id"])) {
         $this->ilias->raiseError($this->lng->txt("no_create_permission"), $this->ilias->error_obj->WARNING);
     } elseif ($_FILES["scormfile"]["name"]) {
         // check if file was uploaded
         $source = $_FILES["scormfile"]["tmp_name"];
         if ($source == 'none' || !$source) {
             ilUtil::sendInfo($this->lng->txt("upload_error_file_not_found"), true);
             $this->newModuleVersion();
             return;
         }
     } elseif ($_POST["uploaded_file"]) {
         // check if the file is in the ftp directory and readable
         if (!ilUploadFiles::_checkUploadFile($_POST["uploaded_file"])) {
             $this->ilias->raiseError($this->lng->txt("upload_error_file_not_found"), $this->ilias->error_obj->MESSAGE);
         }
         // copy the uploaded file to the client web dir to analyze the imsmanifest
         // the copy will be moved to the lm directory or deleted
         $source = CLIENT_WEB_DIR . "/" . $_POST["uploaded_file"];
         ilUploadFiles::_copyUploadFile($_POST["uploaded_file"], $source);
         $source_is_copy = true;
     } else {
         ilUtil::sendInfo($this->lng->txt("upload_error_file_not_found"), true);
         $this->newModuleVersion();
         return;
     }
     // fim.
     //unzip the imsmanifest-file from new uploaded file
     $pathinfo = pathinfo($source);
     $dir = $pathinfo["dirname"];
     $file = $pathinfo["basename"];
     $cdir = getcwd();
     chdir($dir);
     //we need more flexible unzip here than ILIAS standard classes allow
     $unzipcmd = $unzip . " -o " . ilUtil::escapeShellArg($source) . " " . $tocheck;
     exec($unzipcmd);
     chdir($cdir);
     $tmp_file = $dir . "/" . $tocheck . "." . $_GET["ref_id"];
     rename($dir . "/" . $tocheck, $tmp_file);
     $new_manifest = file_get_contents($tmp_file);
     //remove temp file
     unlink($tmp_file);
     //get old manifest file
     $old_manifest = file_get_contents($this->object->getDataDirectory() . "/" . $tocheck);
     //reload fixed version of file
     $check = '/xmlns="http:\\/\\/www.imsglobal.org\\/xsd\\/imscp_v1p1"/';
     $replace = "xmlns=\"http://www.imsproject.org/xsd/imscp_rootv1p1p2\"";
     $reload_manifest = preg_replace($check, $replace, $new_manifest);
     //do testing for converted versions as well as earlier ILIAS version messed up utf8 conversion
     if (strcmp($new_manifest, $old_manifest) == 0 || strcmp(utf8_encode($new_manifest), $old_manifest) == 0 || strcmp($reload_manifest, $old_manifest) == 0 || strcmp(utf8_encode($reload_manifest), $old_manifest) == 0) {
         //get exisiting module version
         $module_version = $this->object->getModuleVersion();
         if ($_FILES["scormfile"]["name"]) {
             //build targetdir in lm_data
             $file_path = $this->object->getDataDirectory() . "/" . $_FILES["scormfile"]["name"] . "." . $module_version;
             //move to data directory and add subfix for versioning
             ilUtil::moveUploadedFile($_FILES["scormfile"]["tmp_name"], $_FILES["scormfile"]["name"], $file_path);
         } else {
             //build targetdir in lm_data
             $file_path = $this->object->getDataDirectory() . "/" . $_POST["uploaded_file"] . "." . $module_version;
             // move the already copied file to the lm_data directory
             rename($source, $file_path);
         }
         //unzip and replace old extracted files
         ilUtil::unzip($file_path, true);
         ilUtil::renameExecutables($this->object->getDataDirectory());
         //(security)
         //increase module version
         $this->object->setModuleVersion($module_version + 1);
         $this->object->update();
         //redirect to properties and display success
         ilUtil::sendInfo($this->lng->txt("cont_new_module_added"), true);
         ilUtil::redirect("ilias.php?baseClass=ilSAHSEditGUI&ref_id=" . $_GET["ref_id"]);
         exit;
     } else {
         if ($source_is_copy) {
             unlink($source);
         }
         ilUtil::sendInfo($this->lng->txt("cont_invalid_new_module"), true);
         $this->newModuleVersion();
     }
 }
 /**
  * display status information or report errors messages
  * in case of error
  *
  * @access	public
  */
 function uploadObject()
 {
     global $_FILES, $rbacsystem;
     include_once 'Services/FileSystem/classes/class.ilUploadFiles.php';
     // check create permission
     if (!$rbacsystem->checkAccess("create", $_GET["ref_id"], "sahs")) {
         $this->ilias->raiseError($this->lng->txt("no_create_permission"), $this->ilias->error_obj->WARNING);
     } elseif ($_FILES["scormfile"]["name"]) {
         // check if file was uploaded
         $source = $_FILES["scormfile"]["tmp_name"];
         if ($source == 'none' || !$source) {
             $this->ilias->raiseError($this->lng->txt("msg_no_file"), $this->ilias->error_obj->MESSAGE);
         }
         // get_cfg_var("upload_max_filesize"); // get the may filesize form t he php.ini
         switch ($__FILES["scormfile"]["error"]) {
             case UPLOAD_ERR_INI_SIZE:
                 $this->ilias->raiseError($this->lng->txt("err_max_file_size_exceeds"), $this->ilias->error_obj->MESSAGE);
                 break;
             case UPLOAD_ERR_FORM_SIZE:
                 $this->ilias->raiseError($this->lng->txt("err_max_file_size_exceeds"), $this->ilias->error_obj->MESSAGE);
                 break;
             case UPLOAD_ERR_PARTIAL:
                 $this->ilias->raiseError($this->lng->txt("err_partial_file_upload"), $this->ilias->error_obj->MESSAGE);
                 break;
             case UPLOAD_ERR_NO_FILE:
                 $this->ilias->raiseError($this->lng->txt("err_no_file_uploaded"), $this->ilias->error_obj->MESSAGE);
                 break;
         }
         $file = pathinfo($_FILES["scormfile"]["name"]);
     } elseif ($_POST["uploaded_file"]) {
         // check if the file is in the upload directory and readable
         if (!ilUploadFiles::_checkUploadFile($_POST["uploaded_file"])) {
             $this->ilias->raiseError($this->lng->txt("upload_error_file_not_found"), $this->ilias->error_obj->MESSAGE);
         }
         $file = pathinfo($_POST["uploaded_file"]);
     } else {
         $this->ilias->raiseError($this->lng->txt("msg_no_file"), $this->ilias->error_obj->MESSAGE);
     }
     $name = substr($file["basename"], 0, strlen($file["basename"]) - strlen($file["extension"]) - 1);
     if ($name == "") {
         $name = $this->lng->txt("no_title");
     }
     // create and insert object in objecttree
     switch ($_POST["sub_type"]) {
         case "scorm2004":
             include_once "./Modules/Scorm2004/classes/class.ilObjSCORM2004LearningModule.php";
             $newObj = new ilObjSCORM2004LearningModule();
             $newObj->setEditable($_POST["editable"] == 'y');
             $newObj->setImportSequencing($_POST["import_sequencing"]);
             $newObj->setSequencingExpertMode($_POST["import_sequencing"]);
             break;
         case "scorm":
             include_once "./Modules/ScormAicc/classes/class.ilObjSCORMLearningModule.php";
             $newObj = new ilObjSCORMLearningModule();
             break;
         case "aicc":
             include_once "./Modules/ScormAicc/classes/class.ilObjAICCLearningModule.php";
             $newObj = new ilObjAICCLearningModule();
             break;
         case "hacp":
             include_once "./Modules/ScormAicc/classes/class.ilObjHACPLearningModule.php";
             $newObj = new ilObjHACPLearningModule();
             break;
     }
     $newObj->setTitle($name);
     $newObj->setSubType($_POST["sub_type"]);
     $newObj->setDescription("");
     $newObj->create(true);
     $newObj->createReference();
     $newObj->putInTree($_GET["ref_id"]);
     $newObj->setPermissions($_GET["ref_id"]);
     $newObj->notify("new", $_GET["ref_id"], $_GET["parent_non_rbac_id"], $_GET["ref_id"], $newObj->getRefId());
     // create data directory, copy file to directory
     $newObj->createDataDirectory();
     if ($_FILES["scormfile"]["name"]) {
         // copy uploaded file to data directory
         $file_path = $newObj->getDataDirectory() . "/" . $_FILES["scormfile"]["name"];
         ilUtil::moveUploadedFile($_FILES["scormfile"]["tmp_name"], $_FILES["scormfile"]["name"], $file_path);
     } else {
         // copy uploaded file to data directory
         $file_path = $newObj->getDataDirectory() . "/" . $_POST["uploaded_file"];
         ilUploadFiles::_copyUploadFile($_POST["uploaded_file"], $file_path);
     }
     ilUtil::unzip($file_path);
     ilUtil::renameExecutables($newObj->getDataDirectory());
     $title = $newObj->readObject();
     if ($title != "") {
         ilObject::_writeTitle($newObj->getId(), $title);
         /*$md = new ilMD($newObj->getId(),0, $newObj->getType());
         		if(is_object($md_gen = $md->getGeneral()))
         		{
         			$md_gen->setTitle($title);
         			$md_gen->update();
         		}*/
     }
     ilUtil::sendInfo($this->lng->txt($newObj->getType() . "_added"), true);
     ilUtil::redirect("ilias.php?baseClass=ilSAHSEditGUI&ref_id=" . $newObj->getRefId());
 }
 /**
  * upload file
  */
 function uploadFile()
 {
     global $lng;
     // determine directory
     $cur_subdir = str_replace(".", "", ilUtil::stripSlashes($_GET["cdir"]));
     $cur_dir = !empty($cur_subdir) ? $this->main_dir . "/" . $cur_subdir : $this->main_dir;
     $tgt_file = null;
     if (is_file($_FILES["new_file"]["tmp_name"])) {
         $tgt_file = $cur_dir . "/" . ilUtil::stripSlashes($_FILES["new_file"]["name"]);
         move_uploaded_file($_FILES["new_file"]["tmp_name"], $tgt_file);
     } elseif ($_POST["uploaded_file"]) {
         include_once 'Services/FileSystem/classes/class.ilUploadFiles.php';
         // check if the file is in the ftp directory and readable
         if (ilUploadFiles::_checkUploadFile($_POST["uploaded_file"])) {
             $tgt_file = $cur_dir . "/" . ilUtil::stripSlashes($_POST["uploaded_file"]);
             // copy uploaded file to data directory
             ilUploadFiles::_copyUploadFile($_POST["uploaded_file"], $tgt_file);
         }
     } else {
         if (trim($_FILES["new_file"]["name"]) == "") {
             ilUtil::sendFailure($lng->txt("cont_enter_a_file"), true);
         }
     }
     if ($tgt_file && is_file($tgt_file)) {
         $unzip = null;
         // extract zip?
         include_once "./Services/Utilities/classes/class.ilMimeTypeUtil.php";
         if (ilMimeTypeUtil::getMimeType($tgt_file) == "application/zip") {
             $this->ctrl->setParameter($this, "upfile", basename($tgt_file));
             $url = $this->ctrl->getLinkTarget($this, "unzipFile");
             $this->ctrl->setParameter($this, "upfile", "");
             include_once "Services/UIComponent/Button/classes/class.ilLinkButton.php";
             $unzip = ilLinkButton::getInstance();
             $unzip->setCaption("unzip");
             $unzip->setUrl($url);
             $unzip = " " . $unzip->render();
         }
         ilUtil::sendSuccess($lng->txt("cont_file_created") . $unzip, true);
         $this->setPerformedCommand("create_file", array("name" => substr($tgt_file, strlen($this->main_dir) + 1)));
     }
     $this->ctrl->saveParameter($this, "cdir");
     ilUtil::renameExecutables($this->main_dir);
     $this->ctrl->redirect($this, "listFiles");
 }