diff --git a/h5p-development.class.php b/h5p-development.class.php index 89b9c5f..d599ca1 100644 --- a/h5p-development.class.php +++ b/h5p-development.class.php @@ -96,6 +96,7 @@ class H5PDevelopment { foreach ($this->libraries as $library) { $this->h5pF->deleteLibraryDependencies($library['libraryId']); // This isn't optimal, but without it we would get duplicate warnings. + // TODO: You might get PDOExceptions if two or more requests does this at the same time!! $types = array('preloaded', 'dynamic', 'editor'); foreach ($types as $type) { if (isset($library[$type . 'Dependencies'])) { diff --git a/h5p.classes.php b/h5p.classes.php index d969a8a..c8c4d97 100644 --- a/h5p.classes.php +++ b/h5p.classes.php @@ -492,15 +492,14 @@ class H5PValidator { } $libraryH5PData = $this->getLibraryData($file, $filePath, $tmpDir); - - /* library's directory name and machineName in library.json must match */ - if($libraryH5PData['machineName'] !== $file) { - $this->h5pF->setErrorMessage($this->h5pF->t('Library directory name must match machineName in library.json. (Directory: %directoryName , machineName: %machineName)', array('%directoryName' => $file, '%machineName' => $libraryH5PData['machineName']))); - $valid = FALSE; - continue; - } - if ($libraryH5PData) { + if ($libraryH5PData !== FALSE) { + // Library's directory name and machineName in library.json must match + if ($libraryH5PData['machineName'] !== $file) { + $this->h5pF->setErrorMessage($this->h5pF->t('Library directory name must match machineName in library.json. (Directory: %directoryName , machineName: %machineName)', array('%directoryName' => $file, '%machineName' => $libraryH5PData['machineName']))); + $valid = FALSE; + continue; + } $libraries[$libraryH5PData['machineName']] = $libraryH5PData; } else { @@ -1384,7 +1383,7 @@ class H5PCore { $files['scripts'][] = $dependency['path'] . '/' . trim(is_array($file) ? $file['path'] : $file); } } - if ($dependency['dropCss'] !== '1' && !empty($dependency['preloadedCss']) && $dependency['preloadedCss'][0] !== '') { + if ((!isset($dependency['dropCss']) || $dependency['dropCss'] !== '1') && !empty($dependency['preloadedCss']) && $dependency['preloadedCss'][0] !== '') { foreach ($dependency['preloadedCss'] as $file) { $files['styles'][] = $dependency['path'] . '/' . trim(is_array($file) ? $file['path'] : $file); } @@ -1465,11 +1464,17 @@ class H5PCore { } $dependencyLibrary = $this->loadLibrary($dependency['machineName'], $dependency['majorVersion'], $dependency['minorVersion']); - $dependencies[$dependencyKey] = array( - 'library' => $dependencyLibrary, - 'type' => $type - ); - $this->findLibraryDependencies($dependencies, $dependencyLibrary, $type === 'editor'); + if ($dependencyLibrary) { + $dependencies[$dependencyKey] = array( + 'library' => $dependencyLibrary, + 'type' => $type + ); + $this->findLibraryDependencies($dependencies, $dependencyLibrary, $type === 'editor'); + } + else { + // This site is missing a dependency! + $this->h5pF->setErrorMessage($this->h5pF->t('Missing dependency @dep required by @lib.', array('@dep' => H5PCore::libraryToString($dependency), '@lib' => H5PCore::libraryToString($library)))); + } } } } diff --git a/js/h5p.js b/js/h5p.js index 9d57ffb..36c2ab8 100644 --- a/js/h5p.js +++ b/js/h5p.js @@ -40,6 +40,9 @@ H5P.init = function () { var $container = H5P.jQuery('
').appendTo($element); var contentId = $element.data('content-id'); var contentData = H5PIntegration.getContentData(contentId); + if (contentData === undefined) { + return H5P.error('No data for content id ' + contentId + '. Perhaps the library is gone?'); + } var library = { library: contentData.library, params: H5P.jQuery.parseJSON(contentData.jsonContent)