98 lines
3.8 KiB
PHP
98 lines
3.8 KiB
PHP
<?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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|