5 use Drush\Commands\DrushCommands;
7 use Symfony\Component\Yaml\Yaml;
8 use Masterminds\HTML5\Parser\FileInputStream;
15 class Drush extends DrushCommands {
17 private $moduleDirectory;
18 private $librariesFilePath;
19 private $reactAppPath;
20 private $reactAppBuildDirectoryPath;
21 private $reactAppBuildStaticJsDirectoryPath;
22 private $reactAppBuildStaticCssDirectoryPath;
28 $this->moduleDirectory = DRUPAL_ROOT .
"/" . drupal_get_path(
"module",
"dkan_metadata_form");
29 $this->librariesFilePath = $this->moduleDirectory .
"/dkan_metadata_form.libraries.yml";
30 $this->reactAppPath = $this->moduleDirectory .
"/js/app";
31 $this->reactAppBuildDirectoryPath = $this->reactAppPath .
"/build";
32 $this->reactAppBuildStaticJsDirectoryPath = $this->reactAppBuildDirectoryPath .
"/static/js";
33 $this->reactAppBuildStaticCssDirectoryPath = $this->reactAppBuildDirectoryPath .
"/static/css";
44 $this->createLoadMeJs();
45 $this->createtLibrariesFile();
51 private function createtLibrariesFile() {
52 $this->removeExistingFile();
54 $libraries = $this->getLibrariesBasicStructure();
57 "css" => $this->reactAppBuildStaticCssDirectoryPath,
58 "js" => $this->reactAppBuildStaticJsDirectoryPath,
61 foreach ($paths as $type => $path) {
62 $base =
"js/app/build/static/{$type}/";
63 $chunks = $this->getAppChunckFiles($path);
64 $libraries = $this->setLibraries($libraries, $chunks, $type, $base);
67 $yaml = Yaml::dump($libraries);
68 file_put_contents($this->librariesFilePath, $yaml);
74 private function setLibraries($libraries, $chunks, $type, $base) {
75 foreach ($chunks as $chunk) {
77 $libraries[
'dkan_metadata_form'][
'js'][$base . $chunk] = [];
80 $libraries[
'dkan_metadata_form'][
'css'][
'base'][$base . $chunk] = [];
89 private function getAppChunckFiles($path) {
90 $folderInfo = scandir($path);
91 unset($folderInfo[0]);
92 unset($folderInfo[1]);
94 foreach ($folderInfo as $dirfile) {
95 if (!$this->skip($dirfile)) {
105 private function skip($dirfile) {
106 $skips = [
"LICENSE",
'map',
'loadme',
'runtime'];
108 foreach ($skips as $s) {
109 if (substr_count($dirfile, $s) > 0) {
120 private function removeExistingFile() {
121 if (file_exists($this->librariesFilePath)) {
122 unlink($this->librariesFilePath);
129 private function getLibrariesBasicStructure() {
132 'dkan_metadata_form' => [
135 "js/app/build/static/js/loadme.js" => [],
141 "core/drupalSettings",
150 private function createLoadMeJs() {
151 $loadMeJsFilePath = $this->reactAppBuildStaticJsDirectoryPath .
"/loadme.js";
153 if (file_exists($loadMeJsFilePath)) {
154 unlink($loadMeJsFilePath);
157 $indexFilePath = $this->reactAppBuildDirectoryPath .
"/index.html";
158 $input =
new FileInputStream($indexFilePath);
161 $document = $html->parse($input);
162 $scriptTags = $document->getElementsByTagName(
"script");
165 foreach ($scriptTags as $scriptTag) {
166 $content = $scriptTag->textContent;
167 if (!empty($content)) {
168 file_put_contents($loadMeJsFilePath, $content);