Optimisation de l'export

This commit is contained in:
Fred Tempez 2024-09-04 08:48:10 +02:00
parent 9c5f6448b1
commit 485392e772

View File

@ -1759,21 +1759,25 @@ class course extends common
if ($this->getInput('courseManageExport' . $pageId, helper::FILTER_BOOLEAN) === true) {
$pageContent = $this->getPage($pageId, $courseId);
// Extraction des URLs des ressources (images, fichiers, etc.)
preg_match_all('/<img[^>]+src=["\'](.*?)["\']/i', $pageContent, $imgMatches);
preg_match_all('/<a[^>]+href=["\'](.*?)["\']/i', $pageContent, $linkMatches);
// Extraction des URLs des ressources (images, vidéos, fichiers, etc.)
preg_match_all('/<img[^>]+src=["\'](.*?)["\']/i', $pageContent, $imgMatches); // Images
preg_match_all('/<a[^>]+href=["\'](.*?)["\']/i', $pageContent, $linkMatches); // Liens
preg_match_all('/<video[^>]+src=["\'](.*?)["\']/i', $pageContent, $videoMatches); // Vidéos directes
preg_match_all('/<source[^>]+src=["\'](.*?)["\']/i', $pageContent, $sourceMatches); // Vidéos dans balises <source>
if (!empty($imgMatches[1])) {
$resources = array_merge($resources, $imgMatches[1]);
// Traitement des images
$this->processResources($pageContent, '/<img[^>]+src=["\'](.*?)["\']/i', $resources);
// Remplacement des chemins pour les images dans $pageContent
foreach ($imgMatches[1] as $resourceUrl) {
$resourcePath = parse_url($resourceUrl, PHP_URL_PATH);
$resourceFile = basename($resourcePath);
$pageContent = str_replace($resourceUrl, $resourceFile, $pageContent);
}
}
// Traitement des vidéos directes via <video>
$this->processResources($pageContent, '/<video[^>]+src=["\'](.*?)["\']/i', $resources);
// Traitement des sources dans les balises <source> (utilisées dans <video> ou <audio>)
$this->processResources($pageContent, '/<source[^>]+src=["\'](.*?)["\']/i', $resources);
// Traitement des liens <a>
$this->processResources($pageContent, '/<a[^>]+href=["\'](.*?)["\']/i', $resources);
// Traitement des liens
if (!empty($linkMatches[1])) {
$resources = array_merge($resources, $linkMatches[1]);
@ -1810,7 +1814,7 @@ class course extends common
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>' . $this->getData(['course', $courseId, 'title']). '</title>
<title>' . $this->getData(['course', $courseId, 'title']) . '</title>
<link rel="stylesheet" href="style.css">
</head>
<body>' . $datas . '</body></html>';
@ -1830,10 +1834,6 @@ class course extends common
}
// Valeurs en sortie
$this->addOutput([
'title' => helper::translate('Exporter les pages'),
@ -1842,6 +1842,22 @@ class course extends common
}
private function processResources(&$pageContent, $regex, &$resources)
{
preg_match_all($regex, $pageContent, $matches);
if (!empty($matches[1])) {
$resources = array_merge($resources, $matches[1]);
// Remplacement des chemins dans $pageContent
foreach ($matches[1] as $resourceUrl) {
$resourcePath = parse_url($resourceUrl, PHP_URL_PATH);
$resourceFile = basename($resourcePath);
$pageContent = str_replace($resourceUrl, $resourceFile, $pageContent);
}
}
}
/**
* Sauvegarde d'un cours sans option
*/