*/ require_once __DIR__.'/../inc/global.inc.php'; api_protect_course_script(); if (empty($_POST['current_dir'])) { $current_dir = ''; } else { $current_dir = api_replace_dangerous_char(trim($_POST['current_dir'])); } $uncompress = 1; $allowHtaccess = false; if (('true' === api_get_setting('lp.allow_htaccess_import_from_scorm')) && isset($_POST['allow_htaccess'])) { $allowHtaccess = true; } /* * Check the request method in place of a variable from POST * because if the file size exceed the maximum file upload * size set in php.ini, all variables from POST are cleared ! */ $user_file = $_GET['user_file'] ?? []; $user_file = $user_file ? $user_file : []; $is_error = $user_file['error'] ?? false; $em = Database::getManager(); if (isset($_POST) && $is_error) { Display::addFlash( Display::return_message(get_lang('The file is too big to upload.')) ); return false; unset($_FILES['user_file']); } elseif ('POST' === $_SERVER['REQUEST_METHOD'] && count($_FILES) > 0 && !empty($_FILES['user_file']['name'])) { // A file upload has been detected, now deal with the file... // Directory creation. $stopping_error = false; $s = $_FILES['user_file']['name']; // Get name of the zip file without the extension. $info = pathinfo($s); $filename = $info['basename']; $extension = $info['extension']; $file_base_name = str_replace('.'.$extension, '', $filename); $new_dir = api_replace_dangerous_char(trim($file_base_name)); $type = learnpath::getPackageType($_FILES['user_file']['tmp_name'], $_FILES['user_file']['name']); $proximity = 'local'; if (!empty($_REQUEST['content_proximity'])) { $proximity = $_REQUEST['content_proximity']; } $maker = 'Scorm'; if (!empty($_REQUEST['content_maker'])) { $maker = $_REQUEST['content_maker']; } switch ($type) { case 'chamilo': $filename = CourseArchiver::importUploadedFile($_FILES['user_file']['tmp_name']); if ($filename) { $course = CourseArchiver::readCourse($filename, false); $courseRestorer = new CourseRestorer($course); // FILE_SKIP, FILE_RENAME or FILE_OVERWRITE $courseRestorer->set_file_option(FILE_OVERWRITE); $courseRestorer->restore('', api_get_session_id()); Display::addFlash(Display::return_message(get_lang('File upload succeeded!'))); } break; case 'scorm': $scorm = new scorm(); $scorm->import_package( $_FILES['user_file'], $current_dir, [], false, null, $allowHtaccess ); if (!empty($scorm->manifestToString)) { $scorm->parse_manifest(); $lp = $scorm->import_manifest(api_get_course_int_id(), $_REQUEST['use_max_score']); if ($lp) { $lp ->setContentLocal($proximity) ->setContentMaker($maker) ; $em->persist($lp); $em->flush(); Display::addFlash(Display::return_message(get_lang('File upload succeeded!'))); } } break; case 'aicc': $oAICC = new aicc(); //$entity = $oAICC->getEntity(); $config_dir = $oAICC->import_package($_FILES['user_file']); if (!empty($config_dir)) { $oAICC->parse_config_files($config_dir); $oAICC->import_aicc(api_get_course_id()); Display::addFlash(Display::return_message(get_lang('File upload succeeded!'))); } /*$entity ->setContentLocal($proximity) ->setContentMaker($maker) ->setJsLib('aicc_api.php') ; $em->persist($entity); $em->flush();*/ break; case 'oogie': $take_slide_name = empty($_POST['take_slide_name']) ? false : true; $o_ppt = new OpenofficePresentation($take_slide_name); $first_item_id = $o_ppt->convert_document($_FILES['user_file'], 'make_lp', $_POST['slide_size']); Display::addFlash(Display::return_message(get_lang('File upload succeeded!'))); break; case 'woogie': $split_steps = empty($_POST['split_steps']) || 'per_page' === $_POST['split_steps'] ? 'per_page' : 'per_chapter'; $o_doc = new OpenofficeText($split_steps); $first_item_id = $o_doc->convert_document($_FILES['user_file']); Display::addFlash(Display::return_message(get_lang('File upload succeeded!'))); break; case '': default: Display::addFlash(Display::return_message(get_lang('Unknown package format'), 'warning')); return false; break; } } elseif ('POST' === $_SERVER['REQUEST_METHOD']) { // end if is_uploaded_file // If file name given to get in /upload/, try importing this way. // A file upload has been detected, now deal with the file... // Directory creation. $stopping_error = false; if (!isset($_POST['file_name'])) { return false; } // Escape path with basename so it can only be directly into the archive/ directory. $s = api_get_path(SYS_ARCHIVE_PATH).basename($_POST['file_name']); // Get name of the zip file without the extension $info = pathinfo($s); $filename = $info['basename']; $extension = $info['extension']; $file_base_name = str_replace('.'.$extension, '', $filename); $new_dir = api_replace_dangerous_char(trim($file_base_name)); $result = learnpath::verify_document_size($s); if ($result) { Display::addFlash( Display::return_message(get_lang('The file is too big to upload.')) ); } $type = learnpath::getPackageType($s, basename($s)); switch ($type) { case 'scorm': $oScorm = new scorm(); $entity = $oScorm->getEntity(); $manifest = $oScorm->import_local_package($s, $current_dir); if (!empty($manifest)) { $oScorm->parse_manifest(); $oScorm->import_manifest(api_get_course_int_id(), $_REQUEST['use_max_score']); Display::addFlash(Display::return_message(get_lang('File upload succeeded!'))); } $proximity = ''; if (!empty($_REQUEST['content_proximity'])) { $proximity = Database::escape_string($_REQUEST['content_proximity']); } $maker = ''; if (!empty($_REQUEST['content_maker'])) { $maker = Database::escape_string($_REQUEST['content_maker']); } $entity ->setContentLocal($proximity) ->setContentMaker($maker) ->setJsLib('scorm_api.php') ; $em->persist($entity); $em->flush(); break; case 'aicc': $oAICC = new aicc(); $entity = $oAICC->getEntity(); $config_dir = $oAICC->import_local_package($s, $current_dir); if (!empty($config_dir)) { $oAICC->parse_config_files($config_dir); $oAICC->import_aicc(api_get_course_id()); Display::addFlash(Display::return_message(get_lang('File upload succeeded!'))); } $proximity = ''; if (!empty($_REQUEST['content_proximity'])) { $proximity = $_REQUEST['content_proximity']; } $maker = ''; if (!empty($_REQUEST['content_maker'])) { $maker = $_REQUEST['content_maker']; } $entity ->setContentLocal($proximity) ->setContentMaker($maker) ->setJsLib('aicc_api.php') ; $em->persist($entity); $em->flush(); break; case '': default: Display::addFlash( Display::return_message(get_lang('Unknown package format'), 'warning') ); return false; break; } }