-
Notifications
You must be signed in to change notification settings - Fork 0
/
AssetLoader.php
97 lines (88 loc) · 3.79 KB
/
AssetLoader.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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);
}
}
}
}
}
}