예제 #1
0
 /**
  * Get all scripts, css and semantics data for a library
  *
  * @param string $library_name
  *  Name of the library we want to fetch data for
  */
 public function getLibraryData($machineName, $majorVersion, $minorVersion)
 {
     $libraryData = new stdClass();
     $libraryData->semantics = $this->storage->getSemantics($machineName, $majorVersion, $minorVersion);
     $language = $this->storage->getLanguage($machineName, $majorVersion, $minorVersion);
     if ($language) {
         $libraryData->language = $language;
     }
     $editorLibraryIds = $this->storage->getEditorLibraries($machineName, $majorVersion, $minorVersion);
     foreach ($editorLibraryIds as $editorLibraryId => $editorLibrary) {
         $filePaths = $this->storage->getFilePaths($editorLibraryId);
         if (!empty($filePaths['js'])) {
             foreach ($filePaths['js'] as $jsFilePath) {
                 // TODO: rtrim and check substr(-1) === '}'? jsmin?
                 if (!isset($libraryData->javascript[$jsFilePath])) {
                     $libraryData->javascript[$jsFilePath] = '';
                 }
                 $libraryData->javascript[$jsFilePath] .= "\n" . file_get_contents($jsFilePath);
             }
         }
         $language = $this->storage->getLanguage($editorLibrary['machineName'], $editorLibrary['majorVersion'], $editorLibrary['minorVersion']);
         if ($language) {
             $lang = '; H5PEditor.language["' . $editorLibrary['machineName'] . '"] = ' . $language . ';';
             $libraryData->javascript[md5($lang)] = $lang;
         }
         if (!empty($filePaths['css'])) {
             foreach ($filePaths['css'] as $cssFilePath) {
                 H5peditor::buildCssPath(NULL, $this->basePath . dirname($cssFilePath) . '/');
                 $css = preg_replace_callback('/url\\([\'"]?(?![a-z]+:|\\/+)([^\'")]+)[\'"]?\\)/i', 'H5peditor::buildCssPath', file_get_contents($cssFilePath));
                 $libraryData->css[$cssFilePath] = $css;
             }
         }
     }
     return json_encode($libraryData);
 }
예제 #2
0
 /**
  * Get all scripts, css and semantics data for a library
  *
  * @param string $library_name
  *  Name of the library we want to fetch data for
  * @param string $prefix Optional. Files are relative to another dir.
  */
 public function getLibraryData($machineName, $majorVersion, $minorVersion, $languageCode, $path = '', $prefix = '')
 {
     $libraryData = new stdClass();
     $libraries = $this->findEditorLibraries($machineName, $majorVersion, $minorVersion);
     $libraryData->semantics = $this->h5p->loadLibrarySemantics($machineName, $majorVersion, $minorVersion);
     $libraryData->language = $this->getLibraryLanguage($machineName, $majorVersion, $minorVersion, $languageCode);
     $files = $this->h5p->getDependenciesFiles($libraries, $prefix);
     $this->storage->alterLibraryFiles($files, $libraries);
     if ($path) {
         $path .= '/';
     }
     // Javascripts
     if (!empty($files['scripts'])) {
         foreach ($files['scripts'] as $script) {
             if (preg_match('/:\\/\\//', $script->path) === 1) {
                 // External file
                 $libraryData->javascript[$script->path . $script->version] = "\n" . file_get_contents($script->path);
             } else {
                 // Local file
                 $libraryData->javascript[$this->h5p->url . $script->path . $script->version] = "\n" . file_get_contents($path . $script->path);
             }
         }
     }
     // Stylesheets
     if (!empty($files['styles'])) {
         foreach ($files['styles'] as $css) {
             if (preg_match('/:\\/\\//', $css->path) === 1) {
                 // External file
                 $libraryData->css[$css->path . $css->version] = file_get_contents($css->path);
             } else {
                 // Local file
                 H5peditor::buildCssPath(NULL, $this->h5p->url . dirname($css->path) . '/');
                 $libraryData->css[$this->h5p->url . $css->path . $css->version] = preg_replace_callback('/url\\([\'"]?(?![a-z]+:|\\/+)([^\'")]+)[\'"]?\\)/i', 'H5peditor::buildCssPath', file_get_contents($path . $css->path));
             }
         }
     }
     // Add translations for libraries.
     foreach ($libraries as $library) {
         $language = $this->getLibraryLanguage($library['machineName'], $library['majorVersion'], $library['minorVersion'], $languageCode);
         if ($language !== NULL) {
             $lang = '; H5PEditor.language["' . $library['machineName'] . '"] = ' . $language . ';';
             $libraryData->javascript[md5($lang)] = $lang;
         }
     }
     return json_encode($libraryData);
 }