/**
  * read manifest file
  * @access	public
  */
 function readObject()
 {
     global $ilias, $lng, $ilDB;
     //check for MYSQL 4.1 and json_encode,json_decode
     if (!function_exists('json_encode') || !function_exists('json_decode') || $ilDB->getDBType() == 'mysql' && !$ilDB->isMysql4_1OrHigher()) {
         $ilias->raiseError($lng->txt('scplayer_phpmysqlcheck'), $ilias->error_obj->WARNING);
     }
     $needs_convert = false;
     // convert imsmanifest.xml file in iso to utf8 if needed
     $manifest_file = $this->getDataDirectory() . "/imsmanifest.xml";
     // check if manifestfile exists and space left on device...
     $check_for_manifest_file = is_file($manifest_file);
     // if no manifestfile
     if (!$check_for_manifest_file) {
         $this->ilias->raiseError($this->lng->txt("Manifestfile {$manifest_file} not found!"), $this->ilias->error_obj->MESSAGE);
         return;
     }
     if ($check_for_manifest_file) {
         $manifest_file_array = file($manifest_file);
         foreach ($manifest_file_array as $mfa) {
             // if (seems_not_utf8($mfa))
             if (@iconv('UTF-8', 'UTF-8', $mfa) != $mfa) {
                 $needs_convert = true;
                 break;
             }
         }
         // to copy the file we need some extraspace, counted in bytes *2 ... we need 2 copies....
         $estimated_manifest_filesize = filesize($manifest_file) * 2;
         // i deactivated this, because it seems to fail on some windows systems (see bug #1795)
         //$check_disc_free = disk_free_space($this->getDataDirectory()) - $estimated_manifest_filesize;
         $check_disc_free = 2;
     }
     // if $manifest_file needs to be converted to UTF8
     if ($needs_convert) {
         // if file exists and enough space left on device
         if ($check_for_manifest_file && $check_disc_free > 1) {
             // create backup from original
             if (!copy($manifest_file, $manifest_file . ".old")) {
                 echo "Failed to copy {$manifest_file}...<br>\n";
             }
             // read backupfile, convert each line to utf8, write line to new file
             // php < 4.3 style
             $f_write_handler = fopen($manifest_file . ".new", "w");
             $f_read_handler = fopen($manifest_file . ".old", "r");
             while (!feof($f_read_handler)) {
                 $zeile = fgets($f_read_handler);
                 //echo mb_detect_encoding($zeile);
                 fputs($f_write_handler, utf8_encode($zeile));
             }
             fclose($f_read_handler);
             fclose($f_write_handler);
             // copy new utf8-file to imsmanifest.xml
             if (!copy($manifest_file . ".new", $manifest_file)) {
                 echo "Failed to copy {$manifest_file}...<br>\n";
             }
             if (!@is_file($manifest_file)) {
                 $this->ilias->raiseError($this->lng->txt("cont_no_manifest"), $this->ilias->error_obj->WARNING);
             }
         } else {
             // gives out the specific error
             if (!($check_disc_free > 1)) {
                 $this->ilias->raiseError($this->lng->txt("Not enough space left on device!"), $this->ilias->error_obj->MESSAGE);
             }
             return;
         }
     } else {
         // check whether file starts with BOM (that confuses some sax parsers, see bug #1795)
         $hmani = fopen($manifest_file, "r");
         $start = fread($hmani, 3);
         if (strtolower(bin2hex($start)) == "efbbbf") {
             $f_write_handler = fopen($manifest_file . ".new", "w");
             while (!feof($hmani)) {
                 $n = fread($hmani, 900);
                 fputs($f_write_handler, $n);
             }
             fclose($f_write_handler);
             fclose($hmani);
             // copy new utf8-file to imsmanifest.xml
             if (!copy($manifest_file . ".new", $manifest_file)) {
                 echo "Failed to copy {$manifest_file}...<br>\n";
             }
         } else {
             fclose($hmani);
         }
     }
     //validate the XML-Files in the SCORM-Package
     if ($_POST["validate"] == "y") {
         if (!$this->validate($this->getDataDirectory())) {
             $this->ilias->raiseError("<b>Validation Error(s):</b><br>" . $this->getValidationSummary(), $this->ilias->error_obj->WARNING);
         }
     }
     //check for SCORM 1.2
     $this->convert_1_2_to_2004($manifest_file);
     // start SCORM 2004 package parser/importer
     include_once "./Modules/Scorm2004/classes/ilSCORM13Package.php";
     $newPack = new ilSCORM13Package();
     if ($this->getEditable()) {
         return $newPack->il_importLM($this, $this->getDataDirectory(), $this->getImportSequencing());
     } else {
         return $newPack->il_import($this->getDataDirectory(), $this->getId(), $this->ilias, $_POST["validate"]);
     }
 }