Completed
Push — master ( 66ca74...a4fc5a )
by Matthias
02:39
created

ManifestGenerator::getImageData()   B

Complexity

Conditions 5
Paths 16

Size

Total Lines 32
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 30

Importance

Changes 0
Metric Value
dl 0
loc 32
ccs 0
cts 23
cp 0
rs 8.439
c 0
b 0
f 0
cc 5
eloc 17
nc 16
nop 1
crap 30
1
<?php
2
3
/*
4
 * This file is part of the fusonic/webapp package.
5
 *
6
 * (c) Fusonic GmbH <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Fusonic\WebApp\Generators;
13
14
use Fusonic\WebApp\AppConfiguration;
15
use Fusonic\WebApp\Objects\Image;
16
17
/**
18
 * Generates an app manifest according to the W3C specification "Web App Manifest".
19
 *
20
 * @package Fusonic\WebApp
21
 *
22
 * @see https://www.w3.org/TR/appmanifest/
23
 */
24
final class ManifestGenerator
25
{
26
    /**
27
     * Returns the manifest data as an array.
28
     *
29
     * @param   AppConfiguration    $configuration      The configuration to create the manifest from.
30
     *
31
     * @return  array
32
     */
33
    public function get(AppConfiguration $configuration)
34
    {
35
        $manifest = [ ];
36
37
        if (($backgroundColor = $configuration->getBackgroundColor()) !== null) {
38
            $manifest["background_color"] = $backgroundColor;
39
        }
40
41
        if (($description = $configuration->getDescription()) !== null) {
42
            $manifest["description"] = $description;
43
        }
44
45
        if (($direction = $configuration->getDirection()) !== null) {
46
            $manifest["dir"] = $direction;
47
        }
48
49
        if (($display = $configuration->getDisplay()) !== null) {
50
            $manifest["display"] = $display;
51
        }
52
53
        if (count($icons = $configuration->getIcons()) > 0) {
54
            $manifest["icons"] = [ ];
55
56
            foreach ($icons as $icon) {
57
                $manifest["icons"][] = $this->getImageData($icon);
58
            }
59
        }
60
61
        if (($language = $configuration->getLanguage()) !== null) {
62
            $manifest["lang"] = $language;
63
        }
64
65
        if (($name = $configuration->getName()) !== null) {
66
            $manifest["name"] = $name;
67
        }
68
69
        if (($orientation = $configuration->getOrientation()) !== null) {
70
            $manifest["orientation"] = $orientation;
71
        }
72
73
        if (($scope = $configuration->getScope()) !== null) {
74
            $manifest["scope"] = $scope;
75
        }
76
77
        if (($shortName = $configuration->getShortName()) !== null) {
78
            $manifest["short_name"] = $shortName;
79
        }
80
81
        if (($startUrl = $configuration->getStartUrl()) !== null) {
82
            $manifest["start_url"] = $startUrl;
83
        }
84
85
        if (($themeColor = $configuration->getThemeColor()) !== null) {
86
            $manifest["theme_color"] = $themeColor;
87
        }
88
89
        return $manifest;
90
    }
91
92
    private function getImageData(Image $image)
93
    {
94
        $data = [
95
            "src" => $image->getSrc(),
96
        ];
97
98
        if (($platform = $image->getPlatform()) !== null) {
99
            $data["platform"] = $platform;
100
        }
101
102
        if (count($purpose = $image->getPurpose()) > 0) {
103
            $data["purpose"] = implode(" ", $purpose);
104
        }
105
106
        if (($type = $image->getType()) !== null) {
107
            $data["type"] = $type;
108
        }
109
110
        if (count($sizes = $image->getSizes()) > 0) {
111
            $data["sizes"] = implode(
112
                " ",
113
                array_map(
114
                    function (array $size) {
115
                        return "{$size[0]}x{$size[1]}";
116
                    },
117
                    $sizes
118
                )
119
            );
120
        }
121
122
        return $data;
123
    }
124
125
}
126