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.
		
		
		
		
		
			
		
			
				
					
					
						
							287 lines
						
					
					
						
							10 KiB
						
					
					
				
			
		
		
	
	
							287 lines
						
					
					
						
							10 KiB
						
					
					
				<?php
 | 
						|
 | 
						|
/* For licensing terms, see /license.txt */
 | 
						|
require_once __DIR__.'/../../main/inc/global.inc.php';
 | 
						|
require_once __DIR__.'/h5p_plugin.class.php';
 | 
						|
 | 
						|
$awp = api_get_path(WEB_PATH);
 | 
						|
$pathPlugH5P = api_get_path(WEB_PLUGIN_PATH).'h5p/';
 | 
						|
 | 
						|
if (api_is_anonymous()) {
 | 
						|
    header('Location: '.$awp.'index.php');
 | 
						|
    exit;
 | 
						|
}
 | 
						|
 | 
						|
$version = 6;
 | 
						|
 | 
						|
$htmlHeadXtra[] = '<script src="resources/js/interface.js?v='.$version.'" type="text/javascript" language="javascript"></script>';
 | 
						|
 | 
						|
$id = isset($_GET['id']) ? (int) $_GET['id'] : 0;
 | 
						|
$nodeType = isset($_GET['node_type']) ? Security::remove_XSS($_GET['node_type']) : '';
 | 
						|
 | 
						|
$termA = '';
 | 
						|
$termB = '';
 | 
						|
$termC = '';
 | 
						|
$termD = '';
 | 
						|
$termE = '';
 | 
						|
$termF = '';
 | 
						|
 | 
						|
$option1 = '';
 | 
						|
$option2 = '';
 | 
						|
$option3 = '';
 | 
						|
 | 
						|
$description = '';
 | 
						|
 | 
						|
$term = null;
 | 
						|
 | 
						|
$contentForm = '<p>Error</p>';
 | 
						|
 | 
						|
if ($id > 0) {
 | 
						|
    $sql = "SELECT * FROM plugin_h5p WHERE id = $id ";
 | 
						|
    $result = Database::query($sql);
 | 
						|
 | 
						|
    while ($rowP = Database::fetch_array($result)) {
 | 
						|
        $nodeType = $rowP['node_type'];
 | 
						|
 | 
						|
        $termA = $rowP['terms_a'];
 | 
						|
        $termB = $rowP['terms_b'];
 | 
						|
        $termC = $rowP['terms_c'];
 | 
						|
 | 
						|
        $termD = $rowP['terms_d'];
 | 
						|
        $termE = $rowP['terms_e'];
 | 
						|
        $termF = $rowP['terms_f'];
 | 
						|
 | 
						|
        $option1 = $rowP['opt_1'];
 | 
						|
        $option2 = $rowP['opt_2'];
 | 
						|
        $option3 = $rowP['opt_3'];
 | 
						|
 | 
						|
        $description = $rowP['descript'];
 | 
						|
    }
 | 
						|
 | 
						|
    $fieldId = 'source-'.$id;
 | 
						|
 | 
						|
    $h5pSource = 'cache-h5p/launch/source-'.$nodeType;
 | 
						|
    $h5pDestination = 'cache-h5p/launch/'.$fieldId;
 | 
						|
 | 
						|
    //mkdir($dest_h5p);
 | 
						|
    $installH5P = true;
 | 
						|
 | 
						|
    if (!file_exists('cache-h5p/launch/img/dialogcard.jpg')) {
 | 
						|
        $installH5P = false;
 | 
						|
    }
 | 
						|
    if (!file_exists('cache-h5p/launch/images/dialogcard.jpg')) {
 | 
						|
        $installH5P = false;
 | 
						|
    }
 | 
						|
    if (!file_exists($h5pSource)) {
 | 
						|
        $installH5P = false;
 | 
						|
    } else {
 | 
						|
        copyr($h5pSource, $h5pDestination);
 | 
						|
    }
 | 
						|
 | 
						|
    $contentSource = 'cache-h5p/launch/'.$fieldId.'/content/content.json';
 | 
						|
    $contentFlx = file_get_contents($contentSource);
 | 
						|
 | 
						|
    if (($nodeType == 'dialogcard' || $nodeType == 'memory') && $installH5P) {
 | 
						|
        if (controlSourceCards($termA)) {
 | 
						|
            $baseFlx = getSourceCards($termA, $nodeType);
 | 
						|
        }
 | 
						|
        if (controlSourceCards($termB)) {
 | 
						|
            $baseFlx .= ',';
 | 
						|
            $baseFlx .= getSourceCards($termB, $nodeType);
 | 
						|
        }
 | 
						|
        if (controlSourceCards($termC)) {
 | 
						|
            $baseFlx .= ',';
 | 
						|
            $baseFlx .= getSourceCards($termC, $nodeType);
 | 
						|
        }
 | 
						|
        if (controlSourceCards($termD)) {
 | 
						|
            $baseFlx .= ',';
 | 
						|
            $baseFlx .= getSourceCards($termD, $nodeType);
 | 
						|
        }
 | 
						|
        if (controlSourceCards($termE)) {
 | 
						|
            $baseFlx .= ',';
 | 
						|
            $baseFlx .= getSourceCards($termE, $nodeType);
 | 
						|
        }
 | 
						|
        if (controlSourceCards($termF)) {
 | 
						|
            $baseFlx .= ',';
 | 
						|
            $baseFlx .= getSourceCards($termF, $nodeType);
 | 
						|
        }
 | 
						|
 | 
						|
        $contentFlx = str_replace("\"@base_cards@\"", $baseFlx, $contentFlx);
 | 
						|
    }
 | 
						|
 | 
						|
    if ($nodeType == 'guesstheanswer' && $installH5P) {
 | 
						|
        $extractImgData = "images/dialogcard.jpg";
 | 
						|
        $pathParts = pathinfo($termB);
 | 
						|
        $fileN = $pathParts['filename'];
 | 
						|
        $fileE = $pathParts['extension'];
 | 
						|
        if ($fileN != '') {
 | 
						|
            $fileN = $fileN.'.'.$fileE;
 | 
						|
            $p1 = $termB;
 | 
						|
            if ($p1 != '' && $p1 != 'dialogcard.jpg' && $p1 != 'img/dialogcard.jpg' && $p1 != 'images/dialogcard.jpg') {
 | 
						|
                $p2 = api_get_path(SYS_PLUGIN_PATH).'h5p/cache-h5p/launch/img/'.$fileN;
 | 
						|
                copy($p1, $p2);
 | 
						|
                $extractImgData = "../../img/".$fileN;
 | 
						|
            } else {
 | 
						|
                $extractImgData = $pathPlugH5P.'cache-h5p/launch/img/dialogcard.jpg';
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        $contentFlx = str_replace("@image_b@", json_encode($extractImgData), $contentFlx);
 | 
						|
    }
 | 
						|
 | 
						|
    $contentFlx = str_replace("@terms_a@", $termA, $contentFlx);
 | 
						|
    $contentFlx = str_replace("@terms_b@", $termB, $contentFlx);
 | 
						|
    $contentFlx = str_replace("@terms_c@", $termC, $contentFlx);
 | 
						|
 | 
						|
    $contentFlx = str_replace("@descript@", $description, $contentFlx);
 | 
						|
 | 
						|
    $interfaceLanguage = api_get_language_isocode();
 | 
						|
 | 
						|
    // @TODO support translations in a better way (only en/fr now)
 | 
						|
    if ($interfaceLanguage == 'fr' || $interfaceLanguage == 'french') {
 | 
						|
        $contentFlx = str_replace("\"solution label\"", "\"Voir la solution\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Turn\"", "\"Tourner\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Check\"", "\"Vérifier\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Retry\"", "\"Recommencer\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Correct!\"", "\"Bravo!\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Incorrect!\"", "\"Réponse incorrecte!\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Answer not found!\"", "\"Réponse non trouvée!\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"You got :num out of :total points\"",
 | 
						|
            "\"Votre score :num out sur :total points\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Show solution\"", "\"Voir la solution\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Match found.\"", "\"Correspondance trouvée.\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Reset\"", "\"Recommencer\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Close\"", "\"Fermer\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Time spent\"", "\"Temps\"", $contentFlx);
 | 
						|
    } elseif ($interfaceLanguage == 'es') {
 | 
						|
        $contentFlx = str_replace("\"solution label\"", "\"Ver la solución\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Turn\"", "\"Girar\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Check\"", "\"Verificar\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Retry\"", "\"Volver a intentar\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Correct!\"", "\"¡Bravo!\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Incorrect!\"", "\"¡Respuesta incorrecta!\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Answer not found!\"", "\"¡Respuesta no encontrada!\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"You got :num out of :total points\"",
 | 
						|
            "\"Su nota es de :num sobre :total puntos\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Show solution\"", "\"Ver la solución\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Match found.\"", "\"Coincidencia encontrada.\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Reset\"", "\"Reiniciar\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Close\"", "\"Cerrar\"", $contentFlx);
 | 
						|
        $contentFlx = str_replace("\"Time spent\"", "\"El tiempo pasado\"", $contentFlx);
 | 
						|
    }
 | 
						|
 | 
						|
    $fp = fopen($contentSource, 'w');
 | 
						|
    fwrite($fp, $contentFlx);
 | 
						|
    fclose($fp);
 | 
						|
 | 
						|
    $htmlFile = 'cache-h5p/launch/'.$fieldId.'.html';
 | 
						|
    $h5pSource = file_get_contents('cache-h5p/launch/source-h.html');
 | 
						|
 | 
						|
    $h5pSource = str_replace("{folder}", $fieldId, $h5pSource);
 | 
						|
 | 
						|
    //{folder}
 | 
						|
    $fp = fopen($htmlFile, 'w');
 | 
						|
    fwrite($fp, $h5pSource);
 | 
						|
    fclose($fp);
 | 
						|
 | 
						|
    $contentForm = '<iframe frameborder="0" width="100%" height="600px" ';
 | 
						|
    $contentForm .= ' style="width:100%;height:600px;" ';
 | 
						|
    $contentForm .= ' src="'.$pathPlugH5P.$htmlFile.'" >';
 | 
						|
    $contentForm .= '</iframe>';
 | 
						|
}
 | 
						|
 | 
						|
$contentForm .= '<h3 style="text-align:center;" >Embedded code</h3>';
 | 
						|
$contentForm .= '<textarea rows=5 style="margin-left:10%;width:80%;margin-right:10%;" >';
 | 
						|
$contentForm .= $contentForm;
 | 
						|
$contentForm .= '</textarea>';
 | 
						|
$contentForm .= '<p style="text-align:center;" >';
 | 
						|
$contentForm .= '<a href="list.php" class="btn btn-primary">';
 | 
						|
$contentForm .= '<em class="fa"></em>'.get_lang('Close').'</a>';
 | 
						|
$contentForm .= '</p>';
 | 
						|
 | 
						|
if ($installH5P == false) {
 | 
						|
    $contentForm = Display::return_message(get_lang('FolderDoesntExistsInFileSystem'), 'error');
 | 
						|
}
 | 
						|
 | 
						|
$tpl = new Template("H5P");
 | 
						|
$tpl->assign('form', $contentForm);
 | 
						|
$content = $tpl->fetch('/h5p/view/view.tpl');
 | 
						|
$tpl->assign('content', $content);
 | 
						|
 | 
						|
$tpl->display_one_col_template();
 | 
						|
 | 
						|
/**
 | 
						|
 * Check if a source card is not empty.
 | 
						|
 *
 | 
						|
 * @param string $termData A string from which we extract the first part
 | 
						|
 *
 | 
						|
 * @return bool False on empty, true otherwise
 | 
						|
 */
 | 
						|
function controlSourceCards($termData)
 | 
						|
{
 | 
						|
    if ($termData == '') {
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
    $partTerm = explode("|", $termData);
 | 
						|
    $txtWarp = $partTerm[0];
 | 
						|
    $txtWarp = strip_tags($txtWarp);
 | 
						|
    if ($txtWarp != '') {
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
 | 
						|
    return false;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Parse and reformat base image tags with the given terms string.
 | 
						|
 *
 | 
						|
 * @param string $termData A string from which we only take the first elements (we split it on | )
 | 
						|
 * @param string $nodeType The type of node ('memory', 'cards', etc)
 | 
						|
 *
 | 
						|
 * @return string|string[]
 | 
						|
 */
 | 
						|
function getSourceCards($termData, $nodeType)
 | 
						|
{
 | 
						|
    $baseFlx = '{"tips":{},
 | 
						|
		"text": @text_a@ ,
 | 
						|
		"answer": @answer_a@ ,
 | 
						|
		"image":{"path":@image_a@,
 | 
						|
		"mime":"image\/jpg",
 | 
						|
		"copyright":{"license":"U"},
 | 
						|
		"width":100,
 | 
						|
		"height":100
 | 
						|
		}}';
 | 
						|
 | 
						|
    if ($nodeType == 'memory') {
 | 
						|
        $baseFlx = '{"image":{"path":@image_a@,
 | 
						|
			"mime":"image\/jpeg",
 | 
						|
			"copyright":{"license":"U"},
 | 
						|
			"width":100,"height":100},
 | 
						|
			"description":@text_a@,"matchAlt":@text_a@,"imageAlt":@text_a@}';
 | 
						|
    }
 | 
						|
 | 
						|
    $partTerm = explode("|", $termData);
 | 
						|
    $baseFlx = str_replace("@text_a@", json_encode($partTerm[0]), $baseFlx);
 | 
						|
    $baseFlx = str_replace("@answer_a@", json_encode($partTerm[1]), $baseFlx);
 | 
						|
 | 
						|
    $extractImg = "images/dialogcard.jpg";
 | 
						|
 | 
						|
    $pathParts = pathinfo($partTerm[2]);
 | 
						|
    $fileN = $pathParts['filename'];
 | 
						|
    $fileE = $pathParts['extension'];
 | 
						|
 | 
						|
    if ($fileN != '') {
 | 
						|
        $fileN = $fileN.'.'.$fileE;
 | 
						|
        $p1 = $partTerm[2];
 | 
						|
        if ($p1 != '' && $p1 != 'dialogcard.jpg' && $p1 != 'img/dialogcard.jpg' && $p1 != 'images/dialogcard.jpg') {
 | 
						|
            $p2 = api_get_path(SYS_PLUGIN_PATH).'h5p/cache-h5p/launch/img/'.$fileN;
 | 
						|
            copy($p1, $p2);
 | 
						|
            $extractImg = '../../img/'.$fileN;
 | 
						|
        } else {
 | 
						|
            $extractImg = api_get_path(WEB_PLUGIN_PATH).'h5p/cache-h5p/launch/img/dialogcard.jpg';
 | 
						|
        }
 | 
						|
    }
 | 
						|
    $baseFlx = str_replace("@image_a@", json_encode($extractImg), $baseFlx);
 | 
						|
 | 
						|
    return $baseFlx;
 | 
						|
}
 | 
						|
 |