Passed
Pull Request — master (#1676)
by Arnaud
05:15 queued 14s
created

Alias::generate()   A

Complexity

Conditions 5
Paths 5

Size

Total Lines 24
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 17
CRAP Score 5.0042

Importance

Changes 0
Metric Value
cc 5
eloc 16
nc 5
nop 0
dl 0
loc 24
ccs 17
cts 18
cp 0.9444
crap 5.0042
rs 9.4222
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of Cecil.
7
 *
8
 * Copyright (c) Arnaud Ligny <[email protected]>
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 Cecil\Generator;
15
16
use Cecil\Collection\Page\Page;
17
18
/**
19
 * Class Generator\Alias.
20
 */
21
class Alias extends AbstractGenerator implements GeneratorInterface
22
{
23
    /**
24
     * {@inheritdoc}
25
     */
26 1
    public function generate(): void
27
    {
28
        /** @var Page $page */
29 1
        foreach ($this->builder->getPages() as $page) {
30 1
            $aliases = $this->getPageAliases($page);
31
32 1
            if (!empty($aliases)) {
33 1
                foreach ($aliases as $alias) {
34
                    /** @var Page $aliasPage */
35 1
                    $pageId = $path = Page::slugify($alias);
36
                    // i18n
37 1
                    if ($page->getVariable('language') != $this->config->getLanguageDefault()) {
38
                        $pageId = sprintf('%s/%s', $page->getVariable('language'), $pageId);
39
                    }
40 1
                    $aliasPage = (new Page($pageId))
41 1
                        ->setPath($path)
42 1
                        ->setVariables([
43 1
                            'layout'   => 'redirect',
44 1
                            'redirect' => $page,
45 1
                            'title'    => $alias,
46 1
                            'date'     => $page->getVariable('date'),
47 1
                            'language' => $page->getVariable('language'),
48 1
                        ]);
49 1
                    $this->generatedPages->add($aliasPage);
50
                }
51
            }
52
        }
53
    }
54
55
    /**
56
     * Returns aliases array.
57
     */
58 1
    protected function getPageAliases(Page $page): array
59
    {
60 1
        $aliases = [];
61
62 1
        if ($page->hasVariable('alias')) {
63 1
            $aliases = $page->getVariable('alias');
64
        }
65 1
        if ($page->hasVariable('aliases')) { // backward compatibility
66 1
            $aliases = $page->getVariable('aliases');
67
        }
68 1
        if (!\is_array($aliases)) {
69
            $aliases = [$aliases];
70
        }
71
72 1
        return $aliases;
73
    }
74
}
75