Fixed so that node_insert, node_load and node_view works

namespaces
Svein-Tore Griff With 2012-12-04 15:52:03 +01:00
parent 686df63e9a
commit 9f87cf561c
1 changed files with 31 additions and 44 deletions

View File

@ -22,9 +22,8 @@ class h5pValidator {
'title' => '/^.{1,255}$/', 'title' => '/^.{1,255}$/',
'mainVersion' => '/^[0-9]{1,5}$/', 'mainVersion' => '/^[0-9]{1,5}$/',
'language' => '/^[a-z]{1,5}$/', 'language' => '/^[a-z]{1,5}$/',
'machineName' => '/^[a-z0-9\-]{1,255}$/',
'preloadedDependencies' => array( 'preloadedDependencies' => array(
'machineName' => '/^[a-z0-9\-]{1,255}$/', 'machineName' => '/^[a-z0-9\-]{1,255}$/i',
'minimumVersion' => '/^[0-9]{1,5}$/', 'minimumVersion' => '/^[0-9]{1,5}$/',
), ),
'init' => '/^[$a-z_][0-9a-z_\.$]{1,254}$/i', 'init' => '/^[$a-z_][0-9a-z_\.$]{1,254}$/i',
@ -38,7 +37,7 @@ class h5pValidator {
'author' => '/^.{1,255}$/', 'author' => '/^.{1,255}$/',
'lisence' => '/^(cc-by|cc-by-sa|cc-by-nd|cc-by-nc|cc-by-nc-sa|cc-by-nc-nd|pd|cr)$/', 'lisence' => '/^(cc-by|cc-by-sa|cc-by-nd|cc-by-nc|cc-by-nc-sa|cc-by-nc-nd|pd|cr)$/',
'dynamicDependencies' => array( 'dynamicDependencies' => array(
'machineName' => '/^[a-z0-9\-]{1,255}$/', 'machineName' => '/^[a-z0-9\-]{1,255}$/i',
'minimumVersion' => '/^[0-9]{1,5}$/', 'minimumVersion' => '/^[0-9]{1,5}$/',
), ),
'w' => '/^[0-9]{1,4}$/', 'w' => '/^[0-9]{1,4}$/',
@ -51,7 +50,7 @@ class h5pValidator {
private $libraryRequired = array( private $libraryRequired = array(
'title' => '/^.{1,255}$/', 'title' => '/^.{1,255}$/',
'mainVersion' => '/^[0-9]{1,5}$/', 'mainVersion' => '/^[0-9]{1,5}$/',
'machineName' => '/^[a-z0-9\-]{1,255}$/', 'machineName' => '/^[a-z0-9\-]{1,255}$/i',
); );
private $libraryOptional = array( private $libraryOptional = array(
@ -61,18 +60,18 @@ class h5pValidator {
'lisence' => '/^(cc-by|cc-by-sa|cc-by-nd|cc-by-nc|cc-by-nc-sa|cc-by-nc-nd|pd|cr)$/', 'lisence' => '/^(cc-by|cc-by-sa|cc-by-nd|cc-by-nc|cc-by-nc-sa|cc-by-nc-nd|pd|cr)$/',
'description' => '/^.{1,}$/', 'description' => '/^.{1,}$/',
'dynamicDependencies' => array( 'dynamicDependencies' => array(
'machineName' => '/^[a-z0-9\-]{1,255}$/', 'machineName' => '/^[a-z0-9\-]{1,255}$/i',
'minimumVersion' => '/^[0-9]{1,5}$/', 'minimumVersion' => '/^[0-9]{1,5}$/',
), ),
'preloadedDependencies' => array( 'preloadedDependencies' => array(
'machineName' => '/^[a-z0-9\-]{1,255}$/', 'machineName' => '/^[a-z0-9\-]{1,255}$/i',
'minimumVersion' => '/^[0-9]{1,5}$/', 'minimumVersion' => '/^[0-9]{1,5}$/',
), ),
'preloadedJs' => array( 'preloadedJs' => array(
'path' => '/^(\\[a-z_\-\s0-9\.]+)+\.(?i)(js)$/', 'path' => '/^((\\\|\/)?[a-z_\-\s0-9]+)+\.js$/i',
), ),
'preloadedCss' => array( 'preloadedCss' => array(
'path' => '/^(\\[a-z_\-\s0-9\.]+)+\.(?i)(js)$/', 'path' => '/^((\\\|\/)?[a-z_\-\s0-9]+)+\.css$/i',
), ),
'w' => '/^[0-9]{1,4}$/', 'w' => '/^[0-9]{1,4}$/',
'h' => '/^[0-9]{1,4}$/', 'h' => '/^[0-9]{1,4}$/',
@ -167,7 +166,7 @@ class h5pValidator {
} }
else { else {
if (preg_match('/[^a-z0-9\-]/', $file) === 0) { if (preg_match('/^[a-z0-9\-]{1,255}$/i', $file) === 0) {
$this->h5pF->setErrorMessage($this->h5pF->t('Invalid library name: %name', array('%name' => $file))); $this->h5pF->setErrorMessage($this->h5pF->t('Invalid library name: %name', array('%name' => $file)));
$valid = FALSE; $valid = FALSE;
continue; continue;
@ -179,13 +178,13 @@ class h5pValidator {
continue; continue;
} }
$validLibrary = $this->isValidH5pData($h5pData, $library_name, $this->libraryRequired, $this->libraryOptional); $validLibrary = $this->isValidH5pData($h5pData, $file, $this->libraryRequired, $this->libraryOptional);
if (isset($h5pData->preloadedJs)) { if (isset($h5pData['preloadedJs'])) {
$validLibrary = $this->isExcistingFiles($h5pData->preloadedJs, $tmp_dir, $file) && $validLibrary; $validLibrary = $this->isExcistingFiles($h5pData['preloadedJs'], $tmp_dir, $file) && $validLibrary;
} }
if (isset($h5pData->preloadedCss)) { if (isset($h5pData['preloadedCss'])) {
$validLibrary = $this->isExcistingFiles($h5pData->preloadedCss, $tmp_dir, $file) && $validLibrary; $validLibrary = $this->isExcistingFiles($h5pData['preloadedCss'], $tmp_dir, $file) && $validLibrary;
} }
if ($validLibrary) { if ($validLibrary) {
$libraries[$file][$h5pData['mainVersion']] = $h5pData; $libraries[$file][$h5pData['mainVersion']] = $h5pData;
@ -258,7 +257,7 @@ class h5pValidator {
*/ */
private function getMissingDependencies($dependencies, $libraries) { private function getMissingDependencies($dependencies, $libraries) {
$missing = array(); $missing = array();
foreach ($library['preloadedDependencies'] as $dependency) { foreach ($dependencies as $dependency) {
if (isset($libraries[$dependency['machineName']])) { if (isset($libraries[$dependency['machineName']])) {
if ($libraries[$dependency['machineName']]['minimumVersion'] < $dependency['minimumVersion']) { if ($libraries[$dependency['machineName']]['minimumVersion'] < $dependency['minimumVersion']) {
$missing[$dependency['machineName']] = $dependency; $missing[$dependency['machineName']] = $dependency;
@ -286,10 +285,10 @@ class h5pValidator {
* TRUE if all the files excists * TRUE if all the files excists
*/ */
private function isExcistingFiles($files, $tmp_dir, $library) { private function isExcistingFiles($files, $tmp_dir, $library) {
foreach ($files as $file_path) { foreach ($files as $file) {
$path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $file_path); $path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $file['path']);
if (!file_exists($tmp_dir . DIRECTORY_SEPARATOR . $path)) { if (!file_exists($tmp_dir . DIRECTORY_SEPARATOR . $library . DIRECTORY_SEPARATOR . $path)) {
$this->h5pF->setErrorMessage('The JS file %file is missing from library: %name', array('%file' => $file_path, '%name' => $library)); $this->h5pF->setErrorMessage($this->h5pF->t('The JS file %file is missing from library: %name', array('%file' => $file_path, '%name' => $library)));
return FALSE; return FALSE;
} }
} }
@ -339,7 +338,7 @@ class h5pValidator {
foreach ($h5pData as $key => $value) { foreach ($h5pData as $key => $value) {
if (isset($requirements[$key])) { if (isset($requirements[$key])) {
$valid = $this->isValidRequirement($h5pData, $requirement, $library_name, $property_name) && $valid; $valid = $this->isValidRequirement($value, $requirements[$key], $library_name, $key) && $valid;
} }
// Else: ignore, a package can have parameters that this library doesn't care about, but that library // Else: ignore, a package can have parameters that this library doesn't care about, but that library
// specific implementations does care about... // specific implementations does care about...
@ -376,7 +375,14 @@ class h5pValidator {
elseif (is_array($requirement)) { elseif (is_array($requirement)) {
// We have sub requirements // We have sub requirements
if (is_array($h5pData)) { if (is_array($h5pData)) {
$valid = $this->isValidRequiredH5pData($h5pData, $requirement, $library_name) && $valid; if (is_array(current($h5pData))) {
foreach ($h5pData as $sub_h5pData) {
$valid = $this->isValidRequiredH5pData($sub_h5pData, $requirement, $library_name) && $valid;
}
}
else {
$valid = $this->isValidRequiredH5pData($h5pData, $requirement, $library_name) && $valid;
}
} }
else { else {
$this->h5pF->setErrorMessage($this->h5pF->t("Invalid data provided for %property in %library", array('%property' => $property_name, '%library' => $library_name))); $this->h5pF->setErrorMessage($this->h5pF->t("Invalid data provided for %property in %library", array('%property' => $property_name, '%library' => $library_name)));
@ -425,10 +431,8 @@ class h5pValidator {
if (!$json) { if (!$json) {
return FALSE; return FALSE;
} }
dpm($json);
$jsonData = json_decode($json, TRUE); $jsonData = json_decode($json, TRUE);
if (!$jsonData) { if (!$jsonData) {
dpm('!jsonData');
return FALSE; return FALSE;
} }
return $jsonData; return $jsonData;
@ -500,18 +504,19 @@ class h5pSaver {
$destination_path = $this->h5pF->getH5pPath() . DIRECTORY_SEPARATOR . 'content' . DIRECTORY_SEPARATOR . $contentId; $destination_path = $this->h5pF->getH5pPath() . DIRECTORY_SEPARATOR . 'content' . DIRECTORY_SEPARATOR . $contentId;
rename($current_path, $destination_path); rename($current_path, $destination_path);
$contentJson = file_get_contents($destination_path . DIRECTORY_SEPARATOR . $contentId . DIRECTORY_SEPARATOR . 'content.json'); $contentJson = file_get_contents($destination_path . DIRECTORY_SEPARATOR . 'content.json');
$this->h5pF->storeContentData($contentId, $contentJson, $this->h5pC->mainJsonData); $this->h5pF->storeContentData($contentId, $contentJson, $this->h5pC->mainJsonData);
$librariesInUse = array(); $librariesInUse = array();
$this->getLibraryUsage($librariesInUse, $this->h5pC->mainJsonData); $this->getLibraryUsage($librariesInUse, $this->h5pC->mainJsonData);
$this->h5pF->saveLibraryUsage($contentId, $librariesInUse); $this->h5pF->saveLibraryUsage($contentId, $librariesInUse);
// TODO: Remove folder from temp...
} }
public function getLibraryUsage(&$librariesInUse, $jsonData, $dynamic = FALSE) { public function getLibraryUsage(&$librariesInUse, $jsonData, $dynamic = FALSE) {
if (isset($jsonData['preloadedDependencies'])) { if (isset($jsonData['preloadedDependencies'])) {
foreach ($jsonData['preloadedDependencies'] as $preloadedDependency) { foreach ($jsonData['preloadedDependencies'] as $preloadedDependency) {
$library = $this->getLibrary($preloadedDependency['machineName'], $preloadedDependency['minimumVersion']); $library = $this->h5pF->loadLibrary($preloadedDependency['machineName'], $preloadedDependency['minimumVersion']);
$librariesInUse[$preloadedDependency['machineName']] = array( $librariesInUse[$preloadedDependency['machineName']] = array(
'library' => $library, 'library' => $library,
'preloaded' => $dynamic ? 0 : 1, 'preloaded' => $dynamic ? 0 : 1,
@ -522,7 +527,7 @@ class h5pSaver {
if (isset($jsonData['dynamicDependencies'])) { if (isset($jsonData['dynamicDependencies'])) {
foreach ($jsonData['dynamicDependencies'] as $dynamicDependency) { foreach ($jsonData['dynamicDependencies'] as $dynamicDependency) {
if (!isset($librariesInUse[$dynamicDependency['machineName']])) { if (!isset($librariesInUse[$dynamicDependency['machineName']])) {
$library = $this->getLibrary($dynamicDependency['machineName'], $dynamicDependency['minimumVersion']); $library = $this->h5pF->loadLibrary($dynamicDependency['machineName'], $dynamicDependency['minimumVersion']);
$librariesInUse[$dynamicDependency['machineName']] = array( $librariesInUse[$dynamicDependency['machineName']] = array(
'library' => $library, 'library' => $library,
'preloaded' => 0, 'preloaded' => 0,
@ -532,24 +537,6 @@ class h5pSaver {
} }
} }
} }
/**
* Searches for a suiting library in any uploaded package first, and then in the database
*
* @param string $machineName
* The libraries machineName
* @param int $minimumVersion
* The minimum version for this library
* @return array
* Assosiative array with library information
*/
private function getLibrary($machineName, $minimumVersion) {
if (isset($this->h5pC->librariesJsonData[$machineName]) && key($this->h5pC->librariesJsonData[$machineName]) >= $minimumVersion) {
return current($this->h5pC->librariesJsonData[$machineName]);
}
else {
$this->h5pF->loadLibrary($machineName, $minimumVersion);
}
}
} }
class h5pCore { class h5pCore {