summaryrefslogtreecommitdiffstats
path: root/AssetLoader.php
diff options
context:
space:
mode:
Diffstat (limited to 'AssetLoader.php')
-rw-r--r--AssetLoader.php97
1 files changed, 97 insertions, 0 deletions
diff --git a/AssetLoader.php b/AssetLoader.php
new file mode 100644
index 0000000..066eb77
--- /dev/null
+++ b/AssetLoader.php
@@ -0,0 +1,97 @@
+<?php
+
+class AssetLoader
+{
+ public static $awesomeVendorFiles = [
+ 'asset/static/font/awesome' => 'vendor/fortawesome/font-awesome/webfonts',
+ 'asset/css' => 'vendor/fortawesome/font-awesome/css/fontawesome.css'
+ ];
+
+ public static function update(Composer\Script\Event $event)
+ {
+ $copy = in_array('copy-assets', $event->getArguments(), true);
+
+ if (is_dir('asset')) {
+ // Check for removed files
+ $fs = new Composer\Util\Filesystem();
+ $assets = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(
+ 'asset',
+ FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS
+ ), RecursiveIteratorIterator::CHILD_FIRST);
+ foreach ($assets as $asset) {
+ /** @var SplFileInfo $asset */
+ if ($asset->isDir()) {
+ if ($fs->isDirEmpty($asset->getPathname())) {
+ rmdir($asset);
+ }
+ } elseif (! $asset->isReadable()) {
+ unlink($asset);
+ }
+ }
+ }
+
+ // Check for new files
+ $vendorLibs = new FilesystemIterator('vendor/ipl');
+ foreach ($vendorLibs as $vendorLib) {
+ /** @var SplFileInfo $vendorLib */
+ $assetDir = join(DIRECTORY_SEPARATOR, [$vendorLib->getRealPath(), 'asset']);
+ if (is_readable($assetDir) && is_dir($assetDir)) {
+ $libAssets = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(
+ $assetDir,
+ FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS
+ ), RecursiveIteratorIterator::SELF_FIRST);
+ foreach ($libAssets as $asset) {
+ /** @var SplFileInfo $asset */
+ $relativePath = ltrim(substr($asset->getPathname(), strlen($vendorLib->getRealPath())), '/\\');
+ if (file_exists($relativePath)) {
+ continue;
+ }
+
+ if ($asset->isDir()) {
+ mkdir($relativePath, 0755, true);
+ } elseif ($asset->isFile()) {
+ if ($copy) {
+ copy($asset->getPathname(), $relativePath);
+ } else {
+ symlink($asset->getPathname(), $relativePath);
+ }
+ }
+ }
+ }
+ }
+
+ // Register font-awesome files as assets
+ foreach (static::$awesomeVendorFiles as $targetPath => $sourcePath) {
+ $sourcePath = realpath($sourcePath);
+ if (! $sourcePath) {
+ continue;
+ }
+
+ if (is_dir($sourcePath)) {
+ if (! is_dir($targetPath)) {
+ mkdir($targetPath, 0755, true);
+ }
+
+ $awesomeFiles = new FilesystemIterator($sourcePath);
+ } else { // is_file($sourcePath)
+ $awesomeFiles = [new SplFileInfo($sourcePath)];
+ $sourcePath = $awesomeFiles[0]->getPath();
+ }
+
+ foreach ($awesomeFiles as $awesomeFile) {
+ /** @var SplFileInfo $awesomeFile */
+ $relativePath = join(DIRECTORY_SEPARATOR, [$targetPath, ltrim(
+ substr($awesomeFile->getPathname(), strlen($sourcePath)),
+ '/\\'
+ )]);
+ if (! file_exists($relativePath) && $awesomeFile->isFile()) {
+ if ($copy) {
+ copy($awesomeFile->getPathname(), $relativePath);
+ } else {
+ symlink($awesomeFile->getPathname(), $relativePath);
+ }
+ }
+ }
+ }
+ }
+}