diff --git a/lib/h5p/h5p-metadata.class.php b/lib/h5p/h5p-metadata.class.php
index 572cfd0324d..2154f27a71e 100644
--- a/lib/h5p/h5p-metadata.class.php
+++ b/lib/h5p/h5p-metadata.class.php
@@ -107,7 +107,7 @@ abstract class H5PMetadata {
switch ($config['type']) {
case 'text':
if ($value !== null && strlen($value) > $config['maxLength']) {
- $value = mb_substr($value, 0, $config['maxLength']);
+ $value = \core_text::substr($value, 0, $config['maxLength']);
}
$types[] = '%s';
break;
diff --git a/lib/h5p/h5p.classes.php b/lib/h5p/h5p.classes.php
index 7176ad00431..a624cf8c49a 100644
--- a/lib/h5p/h5p.classes.php
+++ b/lib/h5p/h5p.classes.php
@@ -758,11 +758,14 @@ class H5PValidator {
unlink($tmpPath);
return FALSE;
}
+ // Moodle: the extension mbstring is optional.
+ /*
if (!extension_loaded('mbstring')) {
$this->h5pF->setErrorMessage($this->h5pF->t('The mbstring PHP extension is not loaded. H5P need this to function properly'), 'mbstring-unsupported');
unlink($tmpPath);
return FALSE;
}
+ */
// Create a temporary dir to extract package in.
$tmpDir = $this->h5pF->getUploadedH5pFolderPath();
@@ -809,7 +812,7 @@ class H5PValidator {
}
$totalSize += $fileStat['size'];
- $fileName = mb_strtolower($fileStat['name']);
+ $fileName = \core_text::strtolower($fileStat['name']);
if (preg_match('/(^[\._]|\/[\._])/', $fileName) !== 0) {
continue; // Skip any file or folder starting with a . or _
}
@@ -2432,7 +2435,7 @@ class H5PCore {
// Using content dependencies
foreach ($dependencies as $dependency) {
if (isset($dependency['path']) === FALSE) {
- $dependency['path'] = 'libraries/' . H5PCore::libraryToString($dependency, TRUE);
+ $dependency['path'] = $this->getDependencyPath($dependency);
$dependency['preloadedJs'] = explode(',', $dependency['preloadedJs']);
$dependency['preloadedCss'] = explode(',', $dependency['preloadedCss']);
}
@@ -2452,6 +2455,16 @@ class H5PCore {
return $files;
}
+ /**
+ * Get the path to the dependency.
+ *
+ * @param stdClass $dependency
+ * @return string
+ */
+ protected function getDependencyPath(array $dependency): string {
+ return H5PCore::libraryToString($dependency, TRUE);
+ }
+
private static function getDependenciesHash(&$dependencies) {
// Build hash of dependencies
$toHash = array();
@@ -3303,12 +3316,15 @@ class H5PCore {
$setup->disable_hub = TRUE;
}
+ // Moodle: the extension mbstring is optional.
+ /*
if (!extension_loaded('mbstring')) {
$setup->errors[] = $this->h5pF->t(
'The mbstring PHP extension is not loaded. H5P needs this to function properly'
);
$setup->disable_hub = TRUE;
}
+ */
// Check php version >= 5.2
$php_version = explode('.', phpversion());
@@ -3656,12 +3672,13 @@ class H5PContentValidator {
// Check if string is within allowed length
if (isset($semantics->maxLength)) {
+ // Moodle: the extension mbstring is optional.
+ /*
if (!extension_loaded('mbstring')) {
$this->h5pF->setErrorMessage($this->h5pF->t('The mbstring PHP extension is not loaded. H5P need this to function properly'), 'mbstring-unsupported');
}
- else {
- $text = mb_substr($text, 0, $semantics->maxLength);
- }
+ */
+ $text = \core_text::substr($text, 0, $semantics->maxLength);
}
// Check if string is according to optional regexp in semantics
@@ -3711,11 +3728,14 @@ class H5PContentValidator {
// file name, 2. testing against a returned error array that could
// never be more than 1 element long anyway, 3. recreating the regex
// for every file.
+ // Moodle: the extension mbstring is optional.
+ /*
if (!extension_loaded('mbstring')) {
$this->h5pF->setErrorMessage($this->h5pF->t('The mbstring PHP extension is not loaded. H5P need this to function properly'), 'mbstring-unsupported');
$valid = FALSE;
}
- else if (!preg_match($wl_regex, mb_strtolower($file))) {
+ */
+ if (!preg_match($wl_regex, \core_text::strtolower($file))) {
$this->h5pF->setErrorMessage($this->h5pF->t('File "%filename" not allowed. Only files with the following extensions are allowed: %files-allowed.', array('%filename' => $file, '%files-allowed' => $whitelist)), 'not-in-whitelist');
$valid = FALSE;
}
diff --git a/lib/h5p/readme_moodle.txt b/lib/h5p/readme_moodle.txt
index ed3ce037205..2eb2896e40e 100644
--- a/lib/h5p/readme_moodle.txt
+++ b/lib/h5p/readme_moodle.txt
@@ -14,18 +14,34 @@ Removed:
Added:
* readme_moodle.txt
-Downloaded version: 1.23.1 release
+Downloaded version: 1.24 release
+
=== 3.8 ===
-* In order to allow the dependency path to be overridden by child H5PCore classes, a couple of minor changes have been added to the
+1. In order to allow the dependency path to be overridden by child H5PCore classes, a couple of minor changes have been added to the
h5p.classes.php file:
- Into the getDependenciesFiles method, the line 2435:
$dependency['path'] = 'libraries/' . H5PCore::libraryToString($dependency, TRUE);
has been changed to:
- $dependency['path'] = $this->getDependencyPath($dependency);
+ $dependency['path'] = $this->getDependencyPath($dependency);
- The method getDependencyPath has been added (line 2455). It might be rewritten by child classes.
A PR has been sent to the H5P library with these changes:
https://github.com/h5p/h5p-php-library/compare/master...andrewnicols:libraryPathSubclass
-Hopefully, when upgrading, these patch won't be needed because it will be included in the H5P library by default.
\ No newline at end of file
+Hopefully, when upgrading, these patch won't be needed because it will be included in the H5P library by default.
+
+
+2. As the mbstring extension is optional in Moodle, the following changes have been hardcoded to the library:
+2.1. Comment the following methods in h5p.classes.php file where the extension_loaded('mbstring') is called:
+ * isValidPackage
+ * checkSetupErrorMessage
+ * validateText
+ * validateContentFiles
+
+2.2. Change all the mb_uses straight to the core_text() alternatives. Version 1.24 has 3 ocurrences in h5p.classes.php
+and 1 ocurrence in h5p-metadata.class.php.
+
+
+The point 2 from above won't be needed once the mbstring extension becomes mandatory in Moodle. A request has been
+sent to MDL-65809.
\ No newline at end of file
diff --git a/lib/thirdpartylibs.xml b/lib/thirdpartylibs.xml
index b901656ca51..89c1b67f1f4 100644
--- a/lib/thirdpartylibs.xml
+++ b/lib/thirdpartylibs.xml
@@ -318,6 +318,6 @@
h5p
h5p-php-library
GPL-3.0
- 1.23.1
+ 1.24