Passed
Push — main ( c1e5b8...0797d2 )
by Axel
04:05
created

ManuallyInstallAssets::install()   A

Complexity

Conditions 5
Paths 7

Size

Total Lines 25
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 18
nc 7
nop 1
dl 0
loc 25
rs 9.3554
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Zikula package.
7
 *
8
 * Copyright Zikula - https://ziku.la/
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Zikula\CoreBundle\Composer;
15
16
use Composer\Script\Event;
17
use Symfony\Component\Filesystem\Filesystem;
18
19
/**
20
 * Class ManuallyInstallAssets
21
 *
22
 * Manually install vendor assets to a defined path in the web directory.
23
 */
24
class ManuallyInstallAssets
25
{
26
    /**
27
     * @var array
28
     * The list of assets. [[vendorPath => destinationPath]]
29
     */
30
    protected static $assets = [
31
        '/itsjavi/fontawesome-iconpicker/dist/css/fontawesome-iconpicker.css' => '/fontawesome-iconpicker/fontawesome-iconpicker.css',
32
        '/itsjavi/fontawesome-iconpicker/dist/css/fontawesome-iconpicker.min.css' => '/fontawesome-iconpicker/fontawesome-iconpicker.min.css',
33
        '/itsjavi/fontawesome-iconpicker/dist/js/fontawesome-iconpicker.js' => '/fontawesome-iconpicker/fontawesome-iconpicker.js',
34
        '/itsjavi/fontawesome-iconpicker/dist/js/fontawesome-iconpicker.min.js' => '/fontawesome-iconpicker/fontawesome-iconpicker.min.js',
35
    ];
36
37
    public static function install(Event $event): void
38
    {
39
        $extra = $event->getComposer()->getPackage()->getExtra();
40
        $publicDir = $extra['public-dir'] ?? 'public';
41
        if (!is_dir($publicDir)) {
42
            $event->getIO()->write(sprintf('The %s (%s) specified in composer.json was not found in %s, can not %s.', 'public-dir', $publicDir, getcwd(), 'manually install assets'));
43
44
            return;
45
        }
46
        $config = $event->getComposer()->getConfig();
47
        $vendorDir = $config->has('vendor-dir') ? $config->get('vendor-dir') : 'vendor';
48
        if (!is_dir($vendorDir)) {
49
            $event->getIO()->write(sprintf('The %s (%s) specified in composer.json was not found in %s, can not %s.', 'vendor-dir', $vendorDir, getcwd(), 'manually install assets'));
50
51
            return;
52
        }
53
        $fs = new Filesystem();
54
        $event->getIO()->write('<info>Zikula manually installing assets:</info>');
55
        foreach (static::$assets as $assetPath => $destinationPath) {
56
            $fs->copy($vendorDir . $assetPath, $publicDir . $destinationPath, true);
57
            $event->getIO()->write(sprintf('Zikula installed <comment>%s</comment> in <comment>%s</comment>', $assetPath, $publicDir . $destinationPath));
58
        }
59
        $cwd = getcwd();
60
        $fs->symlink($cwd . '/' . $publicDir . '/jqueryui', $cwd . '/' . $publicDir . '/jquery-ui');
61
        $event->getIO()->write(sprintf('Zikula symlinked <comment>%s</comment> to <comment>%s</comment>', $publicDir . '/jqueryui', $publicDir . '/jquery-ui'));
62
    }
63
}
64