You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							189 lines
						
					
					
						
							6.5 KiB
						
					
					
				
			
		
		
	
	
							189 lines
						
					
					
						
							6.5 KiB
						
					
					
				<?php
 | 
						|
 | 
						|
// For licensing terms, see /license.txt
 | 
						|
 | 
						|
use Chamilo\PluginBundle\Entity\H5pImport\H5pImport;
 | 
						|
use Chamilo\PluginBundle\H5pImport\H5pImporter\H5pImplementation;
 | 
						|
use Chamilo\PluginBundle\H5pImport\H5pImporter\H5pPackageTools;
 | 
						|
 | 
						|
require_once __DIR__.'/../../main/inc/global.inc.php';
 | 
						|
 | 
						|
api_block_anonymous_users();
 | 
						|
api_protect_course_script(true);
 | 
						|
 | 
						|
$plugin = H5pImportPlugin::create();
 | 
						|
 | 
						|
if ('false' === $plugin->get('tool_enabled')) {
 | 
						|
    api_not_allowed(true);
 | 
						|
}
 | 
						|
 | 
						|
$isAllowedToEdit = api_is_allowed_to_edit(true);
 | 
						|
 | 
						|
$em = Database::getManager();
 | 
						|
$embedRepo = $em->getRepository('ChamiloPluginBundle:H5pImport\H5pImport');
 | 
						|
 | 
						|
$course = api_get_course_entity(api_get_course_int_id());
 | 
						|
$session = api_get_session_entity(api_get_session_id());
 | 
						|
 | 
						|
$h5pImportId = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : 0;
 | 
						|
$originIsLearnpath = 'learnpath' === api_get_origin();
 | 
						|
 | 
						|
if (!$h5pImportId) {
 | 
						|
    api_not_allowed(true);
 | 
						|
}
 | 
						|
 | 
						|
/** @var H5pImport|null $h5pImport */
 | 
						|
$h5pImport = $embedRepo->find($h5pImportId);
 | 
						|
 | 
						|
if (!$h5pImport) {
 | 
						|
    api_not_allowed(
 | 
						|
        true,
 | 
						|
        Display::return_message($plugin->get_lang('ContentNotFound'), 'danger')
 | 
						|
    );
 | 
						|
}
 | 
						|
 | 
						|
if ($course->getId() !== $h5pImport->getCourse()->getId()) {
 | 
						|
    api_not_allowed(true);
 | 
						|
}
 | 
						|
 | 
						|
if ($session && $h5pImport->getSession()) {
 | 
						|
    if ($session->getId() !== $h5pImport->getSession()->getId()) {
 | 
						|
        api_not_allowed(true);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
if (!$originIsLearnpath) {
 | 
						|
    $interbreadcrumb[] = [
 | 
						|
        'name' => $plugin->getToolTitle(),
 | 
						|
        'url' => api_get_path(WEB_PLUGIN_PATH).$plugin->get_name().'/start.php',
 | 
						|
    ];
 | 
						|
 | 
						|
    $actions = Display::url(
 | 
						|
        Display::return_icon('back.png', get_lang('Back'), [], ICON_SIZE_MEDIUM),
 | 
						|
        api_get_path(WEB_PLUGIN_PATH).$plugin->get_name().'/start.php?'.api_get_cidreq()
 | 
						|
    );
 | 
						|
}
 | 
						|
 | 
						|
$formTarget = $originIsLearnpath ? '_self' : '_blank';
 | 
						|
$htmlContent = '';
 | 
						|
if ($_REQUEST['view']) {
 | 
						|
    $interface = new H5pImplementation($h5pImport);
 | 
						|
    $h5pCore = new H5PCore(
 | 
						|
        $interface,
 | 
						|
        $h5pImport->getPath(),
 | 
						|
        api_get_self(),
 | 
						|
        'en',
 | 
						|
        false
 | 
						|
    );
 | 
						|
 | 
						|
    $h5pNode = $h5pCore->loadContent($h5pImport->getIid());
 | 
						|
 | 
						|
    if (empty($h5pNode)) {
 | 
						|
        Display::addFlash(
 | 
						|
            Display::return_message(get_lang('Error'), 'error')
 | 
						|
        );
 | 
						|
    } else {
 | 
						|
        $coreAssets = H5pPackageTools::getCoreAssets();
 | 
						|
 | 
						|
        if (!$coreAssets) {
 | 
						|
            Display::addFlash(
 | 
						|
                Display::return_message($plugin->get_lang('h5p_error_missing_core_asset'), 'danger')
 | 
						|
            );
 | 
						|
        } else {
 | 
						|
            $htmlContent .= Display::div(
 | 
						|
                ['class' => 'exercise_overview_options']
 | 
						|
            );
 | 
						|
            $integration = H5pPackageTools::getCoreSettings($h5pImport, $h5pCore);
 | 
						|
            $embedType = H5PCore::determineEmbedType($h5pNode['embedType'], $h5pNode['library']['embedTypes']);
 | 
						|
            $integration['contents']['cid-'.$h5pNode['contentId']] =
 | 
						|
                H5pPackageTools::getContentSettings($h5pNode, $h5pCore);
 | 
						|
 | 
						|
            $preloadedDependencies = $h5pCore->loadContentDependencies($h5pNode['id'], 'preloaded');
 | 
						|
            $files = $h5pCore->getDependenciesFiles(
 | 
						|
                $preloadedDependencies,
 | 
						|
                api_get_path(WEB_COURSE_PATH).$course->getDirectory().'/h5p'
 | 
						|
            );
 | 
						|
            $libraryList = H5pPackageTools::h5pDependenciesToLibraryList($preloadedDependencies);
 | 
						|
 | 
						|
            foreach ($coreAssets['js'] as $script) {
 | 
						|
                $htmlHeadXtra[] = api_get_js_simple($script);
 | 
						|
            }
 | 
						|
            foreach ($coreAssets['css'] as $style) {
 | 
						|
                $htmlHeadXtra[] = api_get_css($style);
 | 
						|
            }
 | 
						|
 | 
						|
            if ('div' === $embedType) {
 | 
						|
                foreach ($files['scripts'] as $script) {
 | 
						|
                    $htmlHeadXtra[] = api_get_js_simple($script->path.$script->version);
 | 
						|
                    $integration['loadedJs'] = $script->path.$script->version;
 | 
						|
                }
 | 
						|
                foreach ($files['styles'] as $script) {
 | 
						|
                    $htmlHeadXtra[] = api_get_css($script->path.$script->version);
 | 
						|
                    $integration['loadedCss'][] = $script->path.$script->version;
 | 
						|
                }
 | 
						|
 | 
						|
                $htmlContent = '<div class="h5p-content" data-content-id="'.$h5pNode['contentId'].'"></div>';
 | 
						|
            } elseif ('iframe' === $embedType) {
 | 
						|
                $integration['core']['scripts'] = $coreAssets['js'];
 | 
						|
                $integration['core']['styles'] = $coreAssets['css'];
 | 
						|
                $integration['contents']['cid-'.$h5pNode['contentId']]['styles'] =
 | 
						|
                    $h5pCore->getAssetsUrls($files['styles']);
 | 
						|
                $integration['contents']['cid-'.$h5pNode['contentId']]['scripts'] =
 | 
						|
                    $h5pCore->getAssetsUrls($files['scripts']);
 | 
						|
 | 
						|
                $htmlContent = '<div class="h5p-iframe-wrapper">
 | 
						|
                        <iframe
 | 
						|
                            id="h5p-iframe-'.$h5pNode['contentId'].'"
 | 
						|
                            class="h5p-iframe"
 | 
						|
                            data-content-id="'.$h5pNode['contentId'].'"
 | 
						|
                            style="height:1px"
 | 
						|
                            src="about:blank" frameBorder="0" scrolling="no"
 | 
						|
                            allowfullscreen="allowfullscreen"
 | 
						|
                            allow="geolocation *; microphone *; camera *; midi *; encrypted-media *"
 | 
						|
                            title="'.$h5pNode['title'].'">
 | 
						|
                        </iframe>
 | 
						|
                    </div>';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!isset($htmlContent)) {
 | 
						|
                Display::addFlash(
 | 
						|
                    Display::return_message($plugin->get_lang('h5p_error_loading'), 'danger')
 | 
						|
                );
 | 
						|
            } else {
 | 
						|
                $htmlContent .= '<script> H5PIntegration = '.json_encode($integration).'</script>';
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
} else {
 | 
						|
    $frmNewAttempt = new FormValidator(
 | 
						|
        'view',
 | 
						|
        'post',
 | 
						|
        $plugin->getViewUrl($h5pImport).'&view=1',
 | 
						|
        '',
 | 
						|
        ['target' => $formTarget],
 | 
						|
        FormValidator::LAYOUT_INLINE
 | 
						|
    );
 | 
						|
    $frmNewAttempt->addHidden('id', $h5pImport->getIid());
 | 
						|
    $frmNewAttempt->addButton(
 | 
						|
        'submit',
 | 
						|
        $plugin->get_lang('start_attempt'),
 | 
						|
        'external-link fa-fw',
 | 
						|
        'success'
 | 
						|
    );
 | 
						|
    $htmlContent = Display::div(
 | 
						|
        $frmNewAttempt->returnForm(),
 | 
						|
        ['class' => 'exercise_overview_options']
 | 
						|
    );
 | 
						|
}
 | 
						|
 | 
						|
$view = new Template($h5pImport->getName());
 | 
						|
$view->assign('header', $h5pImport->getName());
 | 
						|
if (!$originIsLearnpath) {
 | 
						|
    $view->assign('actions', Display::toolbarAction($plugin->get_name(), [$actions]));
 | 
						|
}
 | 
						|
$view->assign(
 | 
						|
    'content',
 | 
						|
    $htmlContent
 | 
						|
);
 | 
						|
 | 
						|
$view->display_one_col_template();
 | 
						|
 |