| <?php |
|
|
| |
| |
| |
| |
| |
| |
|
|
| namespace Piwik\AssetManager; |
|
|
| use Piwik\AssetManager\UIAsset\OnDiskUIAsset; |
| use Piwik\Plugin\Manager; |
| use Piwik\Theme; |
|
|
| abstract class UIAssetFetcher |
| { |
| |
| |
| |
| protected $catalog; |
|
|
| |
| |
| |
| protected $fileLocations = array(); |
|
|
| |
| |
| |
| protected $plugins; |
|
|
| |
| |
| |
| private $theme; |
|
|
| |
| |
| |
| |
| public function __construct($plugins, $theme) |
| { |
| $this->plugins = $plugins; |
| $this->theme = $theme; |
| } |
|
|
| |
| |
| |
| public function getPlugins() |
| { |
| return $this->plugins; |
| } |
|
|
| |
| |
| |
| public function getCatalog() |
| { |
| if ($this->catalog == null) { |
| $this->createCatalog(); |
| } |
|
|
| return $this->catalog; |
| } |
|
|
| abstract protected function retrieveFileLocations(); |
|
|
| |
| |
| |
| abstract protected function getPriorityOrder(); |
|
|
| private function createCatalog() |
| { |
| $this->retrieveFileLocations(); |
|
|
| $this->initCatalog(); |
|
|
| $this->populateCatalog(); |
|
|
| $this->sortCatalog(); |
| } |
|
|
| private function initCatalog() |
| { |
| $catalogSorter = new UIAssetCatalogSorter($this->getPriorityOrder()); |
| $this->catalog = new UIAssetCatalog($catalogSorter); |
| } |
|
|
| private function populateCatalog() |
| { |
| $pluginBaseDir = Manager::getPluginsDirectory(); |
| $pluginWebDirectories = Manager::getAlternativeWebRootDirectories(); |
| $matomoRootDir = $this->getBaseDirectory(); |
|
|
| foreach ($this->fileLocations as $fileLocation) { |
| $fileAbsolute = $matomoRootDir . '/' . $fileLocation; |
|
|
| $newUIAsset = new OnDiskUIAsset($this->getBaseDirectory(), $fileLocation); |
| if ($newUIAsset->exists()) { |
| $this->catalog->addUIAsset($newUIAsset); |
| continue; |
| } |
|
|
| $found = false; |
|
|
| if (strpos($fileAbsolute, $pluginBaseDir) === 0) { |
| |
| foreach ($pluginWebDirectories as $pluginDirectory => $relative) { |
| $fileTest = str_replace($pluginBaseDir, $pluginDirectory, $fileAbsolute); |
| $newFileRelative = str_replace($pluginDirectory, '', $fileTest); |
| $testAsset = new OnDiskUIAsset($pluginDirectory, $newFileRelative, $relative); |
| if ($testAsset->exists()) { |
| $this->catalog->addUIAsset($testAsset); |
| $found = true; |
| break; |
| } |
| } |
| } |
|
|
| if (!$found) { |
| |
| $this->catalog->addUIAsset($newUIAsset); |
| } |
| } |
| } |
|
|
| private function sortCatalog() |
| { |
| $this->catalog = $this->catalog->getSortedCatalog(); |
| } |
|
|
| |
| |
| |
| private function getBaseDirectory() |
| { |
| |
| return PIWIK_DOCUMENT_ROOT; |
| } |
|
|
| |
| |
| |
| public function getTheme() |
| { |
| return $this->theme; |
| } |
|
|
| public static $bowerComponentFileMappings = [ |
| 'libs/bower_components/jquery/dist/jquery.min.js' => 'node_modules/jquery/dist/jquery.min.js', |
| 'libs/bower_components/jquery-ui/ui/minified/jquery-ui.min.js' => 'node_modules/jquery-ui-dist/jquery-ui.min.js', |
| "libs/bower_components/sprintf/dist/sprintf.min.js" => "node_modules/sprintf-js/dist/sprintf.min.js", |
| "libs/bower_components/materialize/dist/js/materialize.min.js" => "node_modules/@materializecss/materialize/dist/js/materialize.min.js", |
| "libs/bower_components/jquery.scrollTo/jquery.scrollTo.min.js" => "node_modules/jquery.scrollto/jquery.scrollTo.min.js", |
| "libs/bower_components/mousetrap/mousetrap.min.js" => "node_modules/mousetrap/mousetrap.min.js", |
| "libs/bower_components/visibilityjs/lib/visibility.core.js" => "node_modules/visibilityjs/lib/visibility.core.js", |
| "libs/bower_components/iframe-resizer/js/iframeResizer.min.js" => "node_modules/iframe-resizer/js/iframeResizer.min.js", |
| "libs/bower_components/qrcode.js/qrcode.js" => "node_modules/qrcodejs2/qrcode.min.js", |
| "libs/bower_components/chroma-js/chroma.min.js" => "node_modules/chroma-js/chroma.min.js", |
| "libs/jquery/jquery.browser.js" => null, |
| "libs/jquery/jquery.truncate.js" => null, |
|
|
| "libs/jquery/themes/base/jquery-ui.min.css" => "node_modules/jquery-ui-dist/jquery-ui.min.css", |
| "libs/bower_components/materialize/dist/css/materialize.min.css" => "node_modules/@materializecss/materialize/dist/css/materialize.min.css", |
| "node_modules/jquery-ui-dist/jquery-ui.theme.min.css" => "node_modules/jquery-ui-dist/jquery-ui.theme.min.css", |
| ]; |
|
|
| protected function mapBowerComponentFilesForBC(array &$fileLocations) |
| { |
| foreach ($fileLocations as $index => $location) { |
| if (!isset(self::$bowerComponentFileMappings[$location])) { |
| continue; |
| } |
|
|
| if (self::$bowerComponentFileMappings[$location] === null) { |
| unset($fileLocations[$index]); |
| } else { |
| $fileLocations[$index] = self::$bowerComponentFileMappings[$location]; |
| } |
| } |
| } |
| } |
|
|