Merge branch 'smart-file-names'
commit
a8b465adb7
108
h5p.classes.php
108
h5p.classes.php
|
@ -497,12 +497,12 @@ interface H5PFrameworkInterface {
|
||||||
public function setOption($name, $value);
|
public function setOption($name, $value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This will set the filtered parameters for the given content.
|
* This will update selected fields on the given content.
|
||||||
*
|
*
|
||||||
* @param int $content_id
|
* @param int $id Content identifier
|
||||||
* @param string $parameters filtered
|
* @param array $fields Content fields, e.g. filtered or slug.
|
||||||
*/
|
*/
|
||||||
public function setFilteredParameters($content_id, $parameters = '');
|
public function updateContentFields($id, $fields);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Will clear filtered params for all the content that uses the specified
|
* Will clear filtered params for all the content that uses the specified
|
||||||
|
@ -528,6 +528,14 @@ interface H5PFrameworkInterface {
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
public function getNumContent($libraryId);
|
public function getNumContent($libraryId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines if content slug is used.
|
||||||
|
*
|
||||||
|
* @param string $slug
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function isContentSlugAvailable($slug);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1475,7 +1483,7 @@ Class H5PExport {
|
||||||
public function createExportFile($content) {
|
public function createExportFile($content) {
|
||||||
$h5pDir = $this->h5pC->path . DIRECTORY_SEPARATOR;
|
$h5pDir = $this->h5pC->path . DIRECTORY_SEPARATOR;
|
||||||
$tempPath = $h5pDir . 'temp' . DIRECTORY_SEPARATOR . $content['id'];
|
$tempPath = $h5pDir . 'temp' . DIRECTORY_SEPARATOR . $content['id'];
|
||||||
$zipPath = $h5pDir . 'exports' . DIRECTORY_SEPARATOR . $content['id'] . '.h5p';
|
$zipPath = $h5pDir . 'exports' . DIRECTORY_SEPARATOR . $content['slug'] . '-' . $content['id'] . '.h5p';
|
||||||
|
|
||||||
// Temp dir to put the h5p files in
|
// Temp dir to put the h5p files in
|
||||||
@mkdir($tempPath, 0777, TRUE);
|
@mkdir($tempPath, 0777, TRUE);
|
||||||
|
@ -1572,12 +1580,11 @@ Class H5PExport {
|
||||||
/**
|
/**
|
||||||
* Delete .h5p file
|
* Delete .h5p file
|
||||||
*
|
*
|
||||||
* @param int/string $contentId
|
* @param array $content object
|
||||||
* Identifier for the H5P
|
|
||||||
*/
|
*/
|
||||||
public function deleteExport($contentId) {
|
public function deleteExport($content) {
|
||||||
$h5pDir = $this->h5pC->path . DIRECTORY_SEPARATOR;
|
$h5pDir = $this->h5pC->path . DIRECTORY_SEPARATOR;
|
||||||
$zipPath = $h5pDir . 'exports' . DIRECTORY_SEPARATOR . $contentId . '.h5p';
|
$zipPath = $h5pDir . 'exports' . DIRECTORY_SEPARATOR . ($content['slug'] ? $content['slug'] . '-' : '') . $content['id'] . '.h5p';
|
||||||
if (file_exists($zipPath)) {
|
if (file_exists($zipPath)) {
|
||||||
unlink($zipPath);
|
unlink($zipPath);
|
||||||
}
|
}
|
||||||
|
@ -1738,7 +1745,7 @@ class H5PCore {
|
||||||
* @param Object $content
|
* @param Object $content
|
||||||
* @return Object NULL on failure.
|
* @return Object NULL on failure.
|
||||||
*/
|
*/
|
||||||
public function filterParameters($content) {
|
public function filterParameters(&$content) {
|
||||||
if (isset($content['filtered']) && $content['filtered'] !== '') {
|
if (isset($content['filtered']) && $content['filtered'] !== '') {
|
||||||
return $content['filtered'];
|
return $content['filtered'];
|
||||||
}
|
}
|
||||||
|
@ -1761,6 +1768,16 @@ class H5PCore {
|
||||||
$this->h5pF->deleteLibraryUsage($content['id']);
|
$this->h5pF->deleteLibraryUsage($content['id']);
|
||||||
$this->h5pF->saveLibraryUsage($content['id'], $content['dependencies']);
|
$this->h5pF->saveLibraryUsage($content['id'], $content['dependencies']);
|
||||||
|
|
||||||
|
if (!$content['slug']) {
|
||||||
|
$content['slug'] = $this->generateContentSlug($content);
|
||||||
|
|
||||||
|
// Remove old export file
|
||||||
|
$oldExport = $this->path . '/exports/' . $content['id'] . '.h5p';
|
||||||
|
if (file_exists($oldExport)) {
|
||||||
|
unlink($oldExport);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($this->exportEnabled) {
|
if ($this->exportEnabled) {
|
||||||
// Recreate export file
|
// Recreate export file
|
||||||
$exporter = new H5PExport($this->h5pF, $this);
|
$exporter = new H5PExport($this->h5pF, $this);
|
||||||
|
@ -1768,11 +1785,41 @@ class H5PCore {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cache.
|
// Cache.
|
||||||
$this->h5pF->setFilteredParameters($content['id'], $params);
|
$this->h5pF->updateContentFields($content['id'], array(
|
||||||
|
'filtered' => $params,
|
||||||
|
'slug' => $content['slug']
|
||||||
|
));
|
||||||
}
|
}
|
||||||
return $params;
|
return $params;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate content slug
|
||||||
|
*
|
||||||
|
* @param array $content object
|
||||||
|
* @return string unique content slug
|
||||||
|
*/
|
||||||
|
private function generateContentSlug($content) {
|
||||||
|
$slug = H5PCore::slugify($content['title']);
|
||||||
|
|
||||||
|
$available = NULL;
|
||||||
|
while (!$available) {
|
||||||
|
if ($available === FALSE) {
|
||||||
|
// If not available, add number suffix.
|
||||||
|
$matches = array();
|
||||||
|
if (preg_match('/(.+-)([0-9]+)$/', $slug, $matches)) {
|
||||||
|
$slug = $matches[1] . (intval($matches[2]) + 1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$slug .= '-2';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$available = $this->h5pF->isContentSlugAvailable($slug);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $slug;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find the files required for this content to work.
|
* Find the files required for this content to work.
|
||||||
*
|
*
|
||||||
|
@ -2394,6 +2441,45 @@ class H5PCore {
|
||||||
|
|
||||||
return $libraryIdMap[$libString];
|
return $libraryIdMap[$libString];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert strings of text into simple kebab case slugs.
|
||||||
|
* Very useful for readable urls etc.
|
||||||
|
*
|
||||||
|
* @param string $input
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function slugify($input) {
|
||||||
|
// Down low
|
||||||
|
$input = strtolower($input);
|
||||||
|
|
||||||
|
// Replace common chars
|
||||||
|
$input = str_replace(
|
||||||
|
array('æ', 'ø', 'ö', 'ó', 'ô', 'Ò', 'Õ', 'Ý', 'ý', 'ÿ', 'ā', 'ă', 'ą', 'œ', 'å', 'ä', 'á', 'à', 'â', 'ã', 'ç', 'ć', 'ĉ', 'ċ', 'č', 'é', 'è', 'ê', 'ë', 'í', 'ì', 'î', 'ï', 'ú', 'ñ', 'ü', 'ù', 'û', 'ß', 'ď', 'đ', 'ē', 'ĕ', 'ė', 'ę', 'ě', 'ĝ', 'ğ', 'ġ', 'ģ', 'ĥ', 'ħ', 'ĩ', 'ī', 'ĭ', 'į', 'ı', 'ij', 'ĵ', 'ķ', 'ĺ', 'ļ', 'ľ', 'ŀ', 'ł', 'ń', 'ņ', 'ň', 'ʼn', 'ō', 'ŏ', 'ő', 'ŕ', 'ŗ', 'ř', 'ś', 'ŝ', 'ş', 'š', 'ţ', 'ť', 'ŧ', 'ũ', 'ū', 'ŭ', 'ů', 'ű', 'ų', 'ŵ', 'ŷ', 'ź', 'ż', 'ž', 'ſ', 'ƒ', 'ơ', 'ư', 'ǎ', 'ǐ', 'ǒ', 'ǔ', 'ǖ', 'ǘ', 'ǚ', 'ǜ', 'ǻ', 'ǽ', 'ǿ'),
|
||||||
|
array('ae', 'oe', 'o', 'o', 'o', 'oe', 'o', 'o', 'y', 'y', 'y', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'c', 'c', 'c', 'c', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'u', 'n', 'u', 'u', 'u', 'es', 'd', 'd', 'e', 'e', 'e', 'e', 'e', 'g', 'g', 'g', 'g', 'h', 'h', 'i', 'i', 'i', 'i', 'i', 'ij', 'j', 'k', 'l', 'l', 'l', 'l', 'l', 'n', 'n', 'n', 'n', 'o', 'o', 'o', 'r', 'r', 'r', 's', 's', 's', 's', 't', 't', 't', 'u', 'u', 'u', 'u', 'u', 'u', 'w', 'y', 'z', 'z', 'z', 's', 'f', 'o', 'u', 'a', 'i', 'o', 'u', 'u', 'u', 'u', 'u', 'a', 'ae', 'oe'),
|
||||||
|
$input);
|
||||||
|
|
||||||
|
// Replace everything else
|
||||||
|
$input = preg_replace('/[^a-z0-9]/', '-', $input);
|
||||||
|
|
||||||
|
// Prevent double hyphen
|
||||||
|
$input = preg_replace('/-{2,}/', '-', $input);
|
||||||
|
|
||||||
|
// Prevent hyphen in beginning or end
|
||||||
|
$input = trim($input, '-');
|
||||||
|
|
||||||
|
// Prevent to long slug
|
||||||
|
if (strlen($input) > 91) {
|
||||||
|
$inputsubstr($input, 0, 92);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prevent empty slug
|
||||||
|
if ($input === '') {
|
||||||
|
$input = 'interactive';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $input;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue