Passed
Push — master ( 55ec05...cfe8d0 )
by Brent
04:42 queued 02:05
created

GenerateCommand::onSiteParserInit()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 17
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 11
nc 2
nop 1
dl 0
loc 17
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace Brendt\Stitcher\Command;
4
5
use Brendt\Stitcher\Event\Event;
6
use Brendt\Stitcher\Lib\Browser;
7
use Brendt\Stitcher\Site\Page;
8
use Brendt\Stitcher\Site\Site;
9
use Brendt\Stitcher\Parser\Site\SiteParser;
10
use Brendt\Stitcher\Stitcher;
11
use Symfony\Component\Console\Command\Command;
12
use Symfony\Component\Console\Helper\ProgressBar;
13
use Symfony\Component\Console\Input\InputInterface;
14
use Symfony\Component\Console\Output\OutputInterface;
15
use Symfony\Component\EventDispatcher\EventDispatcher;
16
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
17
18
class GenerateCommand extends Command implements EventSubscriberInterface
19
{
20
    const ROUTE = 'route';
21
22
    private $browser;
23
    private $stitcher;
24
    private $output;
25
26
    public function __construct(Browser $browser, Stitcher $stitcher, EventDispatcher $eventDispatcher) {
27
        parent::__construct();
28
29
        $this->browser = $browser;
30
        $this->stitcher = $stitcher;
31
        $eventDispatcher->addSubscriber($this);
32
    }
33
34
    protected function configure() {
35
        $this->setName('site:generate')
36
            ->setDescription('Generate the website')
37
            ->setHelp("This command generates the website based on the data in the src/ folder.")
38
            ->addArgument(self::ROUTE, null, 'Specify a route to render');
39
    }
40
41
    protected function execute(InputInterface $input, OutputInterface $output) {
42
        $this->output = $output;
43
44
        $route = $input->getArgument(self::ROUTE);
45
46
        $startTime = microtime(true);
47
        $this->stitcher->stitch($route);
48
49
        if (!$route) {
50
            $this->saveGeneralFiles();
51
        }
52
53
        $endTime = microtime(true);
54
        $processTime = round($endTime - $startTime, 3);
55
56
        if ($route) {
57
            $output->writeln("\n<fg=green>{$route}</> successfully generated in <fg=green>{$this->browser->getPublicDir()}</>. ({$processTime}s)");
58
        } else {
59
            $output->writeln("\nSite successfully generated in <fg=green>{$this->browser->getPublicDir()}</>. ({$processTime}s)");
60
        }
61
    }
62
63
    public static function getSubscribedEvents() {
64
        return [
65
            SiteParser::EVENT_PAGE_PARSED => 'onPageParsed',
66
        ];
67
    }
68
69
    public function onPageParsed(Event $event) {
70
        $pageId = $event->getData()['pageId'] ?? null;
71
        $this->output->writeln("<fg=green>✔</> {$pageId}");
72
    }
73
74
    private function saveGeneralFiles() {
75
        $this->stitcher->saveHtaccess();
76
        $this->output->writeln("\n<fg=green>✔</> .htaccess");
77
78
        if ($this->stitcher->getSiteMap()->isEnabled()) {
79
            $this->stitcher->saveSitemap();
80
            $this->output->writeln("<fg=green>✔</> sitemap.xml");
81
        }
82
    }
83
}
84