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

ManuallyInstallAssets   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 38
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 24
dl 0
loc 38
rs 10
c 0
b 0
f 0
wmc 5

1 Method

Rating   Name   Duplication   Size   Complexity  
A install() 0 25 5
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