Adapted and simplified export, makes it easier to implement on new systems and improves performance.
parent
34d65b9601
commit
48b07c46f5
108
h5p.classes.php
108
h5p.classes.php
|
@ -247,33 +247,6 @@ interface H5PFrameworkInterface {
|
||||||
*/
|
*/
|
||||||
public function deleteLibrary($libraryId);
|
public function deleteLibrary($libraryId);
|
||||||
|
|
||||||
/**
|
|
||||||
* Get all the data we need to export H5P
|
|
||||||
*
|
|
||||||
* @param int $contentId
|
|
||||||
* ContentID of the node we are going to export
|
|
||||||
* @return array
|
|
||||||
* An array with all the data needed to export the h5p in the following format:
|
|
||||||
* 'contentId' => string/int,
|
|
||||||
* 'mainLibrary' => string (machine name for main library),
|
|
||||||
* 'embedType' => string,
|
|
||||||
* 'libraries' => array(
|
|
||||||
* 'machineName' => string,
|
|
||||||
* 'majorVersion' => int,
|
|
||||||
* 'minorVersion' => int,
|
|
||||||
* 'preloaded' => int(0|1),
|
|
||||||
* 'editorLibraries' => array(
|
|
||||||
* 'machineName' => string,
|
|
||||||
* 'majorVersion' => int,
|
|
||||||
* 'minorVersion' => int,
|
|
||||||
* 'preloaded' => int(0|1),
|
|
||||||
*/
|
|
||||||
public function getExportData($contentId);
|
|
||||||
/**
|
|
||||||
* Check if export is enabled.
|
|
||||||
*/
|
|
||||||
public function isExportEnabled();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load content.
|
* Load content.
|
||||||
*
|
*
|
||||||
|
@ -1147,76 +1120,58 @@ Class H5PExport {
|
||||||
* @return string
|
* @return string
|
||||||
* Path to .h5p file
|
* Path to .h5p file
|
||||||
*/
|
*/
|
||||||
public function getExportPath($contentId, $title, $language) {
|
public function getExportPath($content) {
|
||||||
$h5pDir = $this->h5pF->getH5pPath() . DIRECTORY_SEPARATOR;
|
$h5pDir = $this->h5pF->getH5pPath() . DIRECTORY_SEPARATOR;
|
||||||
$tempPath = $h5pDir . 'temp' . DIRECTORY_SEPARATOR . $contentId;
|
$tempPath = $h5pDir . 'tmp' . DIRECTORY_SEPARATOR . $content['id'];
|
||||||
$zipPath = $h5pDir . 'exports' . DIRECTORY_SEPARATOR . $contentId . '.h5p';
|
$zipPath = $h5pDir . 'exports' . DIRECTORY_SEPARATOR . $content['id'] . '.h5p';
|
||||||
|
|
||||||
// Check if h5p-package already exists.
|
// Check if h5p-package already exists.
|
||||||
if (!file_exists($zipPath)) {
|
if (!file_exists($zipPath)) {
|
||||||
// Temp dir to put the h5p files in
|
// Temp dir to put the h5p files in
|
||||||
@mkdir($tempPath);
|
@mkdir($tempPath, 0777, TRUE);
|
||||||
$exportData = $this->h5pF->getExportData($contentId);
|
@mkdir($h5pDir . 'exports', 0777, TRUE);
|
||||||
|
|
||||||
// Create content folder
|
// Create content folder
|
||||||
if ($this->h5pC->copyFileTree($h5pDir . 'content' . DIRECTORY_SEPARATOR . $contentId, $tempPath . DIRECTORY_SEPARATOR . 'content') === FALSE) {
|
if ($this->h5pC->copyFileTree($h5pDir . 'content' . DIRECTORY_SEPARATOR . $content['id'], $tempPath . DIRECTORY_SEPARATOR . 'content') === FALSE) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
file_put_contents($tempPath . DIRECTORY_SEPARATOR . 'content' . DIRECTORY_SEPARATOR . 'content.json', $exportData['jsonContent']);
|
file_put_contents($tempPath . DIRECTORY_SEPARATOR . 'content' . DIRECTORY_SEPARATOR . 'content.json', $content['params']);
|
||||||
|
|
||||||
// Make embedTypes into an array
|
// Make embedTypes into an array
|
||||||
$embedTypes = explode(', ', $exportData['embedType']);
|
$embedTypes = explode(', ', $content['embedType']); // Won't content always be embedded in one way?
|
||||||
|
|
||||||
|
|
||||||
// Build h5p.json
|
// Build h5p.json
|
||||||
$h5pJson = array (
|
$h5pJson = array (
|
||||||
'title' => $title,
|
'title' => $content['title'],
|
||||||
'language' => $language ? $language : 'und',
|
'language' => $content['language'],
|
||||||
'mainLibrary' => $exportData['mainLibrary'],
|
'mainLibrary' => $content['library']['name'],
|
||||||
'embedTypes' => $embedTypes,
|
'embedTypes' => $embedTypes,
|
||||||
);
|
);
|
||||||
|
|
||||||
// Copies libraries to temp dir and create mention in h5p.json
|
// Add dependencies to h5p
|
||||||
foreach($exportData['libraries'] as $library) {
|
$dependencies = $this->h5pC->loadContentDependencies($content['id']);
|
||||||
// Set preloaded and dynamic dependencies
|
foreach ($dependencies as $dependency) {
|
||||||
if ($library['dependencyType'] == 'preloaded') {
|
// Copy library to h5p
|
||||||
$preloadedDependencies[] = array(
|
$source = isset($dependency['path']) ? $dependency['path'] : $h5pDir . 'libraries' . DIRECTORY_SEPARATOR . H5PCore::libraryToString($dependency, TRUE);
|
||||||
'machineName' => $library['machineName'],
|
$destination = $tempPath . DIRECTORY_SEPARATOR . $dependency['machineName'];
|
||||||
'majorVersion' => $library['majorVersion'],
|
$this->h5pC->copyFileTree($source, $destination);
|
||||||
'minorVersion' => $library['minorVersion'],
|
|
||||||
);
|
// Do not add editor dependencies to h5p json.
|
||||||
} elseif ($library['dependencyType'] == 'dynamic') {
|
if ($dependency['dependencyType'] === 'editor') {
|
||||||
$dynamicDependencies[] = array(
|
continue;
|
||||||
'machineName' => $library['machineName'],
|
|
||||||
'majorVersion' => $library['majorVersion'],
|
|
||||||
'minorVersion' => $library['minorVersion'],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add preloaded and dynamic dependencies if they exist
|
$h5pJson[$dependency['dependencyType'] . 'Dependencies'][] = array(
|
||||||
if (isset($preloadedDependencies)) { $h5pJson['preloadedDependencies'] = $preloadedDependencies; }
|
'machineName' => $dependency['machineName'],
|
||||||
if (isset($dynamicDependencies)) { $h5pJson['dynamicDependencies'] = $dynamicDependencies; }
|
'majorVersion' => $dependency['majorVersion'],
|
||||||
|
'minorVersion' => $dependency['minorVersion']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// Save h5p.json
|
// Save h5p.json
|
||||||
$results = print_r(json_encode($h5pJson), true);
|
$results = print_r(json_encode($h5pJson), true);
|
||||||
file_put_contents($tempPath . DIRECTORY_SEPARATOR . 'h5p.json', $results);
|
file_put_contents($tempPath . DIRECTORY_SEPARATOR . 'h5p.json', $results);
|
||||||
|
|
||||||
// Copies libraries to temp dir and create mention in h5p.json
|
|
||||||
foreach($exportData['libraries'] as $library) {
|
|
||||||
$source = NULL;
|
|
||||||
if ($this->h5pC->development_mode & H5PDevelopment::MODE_LIBRARY) {
|
|
||||||
$devlib = $this->h5pC->h5pD->getLibrary($library['machineName'], $library['majorVersion'], $library['minorVersion']);
|
|
||||||
if ($devlib !== NULL) {
|
|
||||||
$source = $devlib['path'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($source === NULL) {
|
|
||||||
$source = $h5pDir . 'libraries' . DIRECTORY_SEPARATOR . $library['machineName'] . '-' . $library['majorVersion'] . '.' . $library['minorVersion'];
|
|
||||||
}
|
|
||||||
$destination = $tempPath . DIRECTORY_SEPARATOR . $library['machineName'];
|
|
||||||
$this->h5pC->copyFileTree($source, $destination);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create new zip instance.
|
// Create new zip instance.
|
||||||
$zip = new ZipArchive();
|
$zip = new ZipArchive();
|
||||||
$zip->open($zipPath, ZIPARCHIVE::CREATE);
|
$zip->open($zipPath, ZIPARCHIVE::CREATE);
|
||||||
|
@ -1374,12 +1329,13 @@ class H5PCore {
|
||||||
foreach ($dependencies as $key => $dependency) {
|
foreach ($dependencies as $key => $dependency) {
|
||||||
$libraryString = H5PCore::libraryToString($dependency);
|
$libraryString = H5PCore::libraryToString($dependency);
|
||||||
if (isset($developmentLibraries[$libraryString])) {
|
if (isset($developmentLibraries[$libraryString])) {
|
||||||
|
$developmentLibraries[$libraryString]['dependencyType'] = $dependencies[$key]['dependencyType'];
|
||||||
$dependencies[$key] = $developmentLibraries[$libraryString];
|
$dependencies[$key] = $developmentLibraries[$libraryString];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->getDependenciesFiles($dependencies);
|
return $dependencies;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue