GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Pull Request — master (#10)
by
unknown
05:33
created

GlideConversion::extractWatermarkPath()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 12
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 6
nc 2
nop 1
1
<?php
2
3
namespace Spatie\Image;
4
5
use League\Glide\Server;
6
use League\Glide\ServerFactory;
7
use Spatie\Image\Exceptions\CouldNotConvert;
8
9
/** @private */
10
final class GlideConversion
11
{
12
    /** @var string */
13
    private $inputImage;
14
15
    /** @var string */
16
    private $imageDriver = 'gd';
17
18
    /** @var string */
19
    private $conversionResult = null;
20
21
    public static function create(string $inputImage): self
22
    {
23
        return new self($inputImage);
24
    }
25
26
    public function __construct(string $inputImage)
27
    {
28
        $this->inputImage = $inputImage;
29
    }
30
31
    public function useImageDriver(string $imageDriver): self
32
    {
33
        $this->imageDriver = $imageDriver;
34
35
        return $this;
36
    }
37
38
    public function performManipulations(Manipulations $manipulations)
39
    {
40
        foreach ($manipulations->getManipulationSequence() as $manipulationGroup) {
41
            $inputFile = $this->conversionResult ?? $this->inputImage;
42
43
            $watermarkPath = $this->extractWatermarkPath($manipulationGroup);
44
45
            $glideServer = $this->createGlideServer($inputFile, $watermarkPath);
46
47
            $this->conversionResult = sys_get_temp_dir().DIRECTORY_SEPARATOR.$glideServer->makeImage(
48
                    pathinfo($inputFile, PATHINFO_BASENAME),
49
                    $this->prepareManipulations($manipulationGroup)
50
                );
51
        }
52
53
        return $this;
54
    }
55
56
    /**
57
     * Removes the watermark path from the manipulationGroup and returns it. This way it can be injected into the Glide
58
     * server as the `watermarks` path.
59
     *
60
     * @param $manipulationGroup
61
     *
62
     * @return null|string
63
     */
64
    private function extractWatermarkPath(&$manipulationGroup)
65
    {
66
        if (array_key_exists('watermark', $manipulationGroup)) {
67
            $watermarkPath = dirname($manipulationGroup['watermark']);
68
69
            $manipulationGroup['watermark'] = basename($manipulationGroup['watermark']);
70
71
            return $watermarkPath;
72
        }
73
74
        return null;
75
    }
76
77
    private function createGlideServer($inputFile, ?string $watermarkPath = null): Server
78
    {
79
        $config = [
80
            'source' => dirname($inputFile),
81
            'cache' => sys_get_temp_dir(),
82
            'driver' => $this->imageDriver,
83
        ];
84
85
        if ($watermarkPath) {
86
            $config['watermarks'] = $watermarkPath;
87
        }
88
89
        return ServerFactory::create($config);
90
    }
91
92
    public function save(string $outputFile)
93
    {
94
        if ($this->conversionResult == '') {
95
            copy($this->inputImage, $outputFile);
96
97
            return;
98
        }
99
100
        rename($this->conversionResult, $outputFile);
101
    }
102
103
    private function prepareManipulations(array $manipulationGroup): array
104
    {
105
        $glideManipulations = [];
106
107
        foreach ($manipulationGroup as $name => $argument) {
108
            $glideManipulations[$this->convertToGlideParameter($name)] = $argument;
109
        }
110
111
        return $glideManipulations;
112
    }
113
114
    private function convertToGlideParameter(string $manipulationName): string
115
    {
116
        $conversions = [
117
            'width' => 'w',
118
            'height' => 'h',
119
            'blur' => 'blur',
120
            'pixelate' => 'pixel',
121
            'crop' => 'fit',
122
            'manualCrop' => 'crop',
123
            'orientation' => 'or',
124
            'fit' => 'fit',
125
            'devicePixelRatio' => 'dpr',
126
            'brightness' => 'bri',
127
            'contrast' => 'con',
128
            'gamma' => 'gam',
129
            'sharpen' => 'sharp',
130
            'filter' => 'filt',
131
            'background' => 'bg',
132
            'border' => 'border',
133
            'quality' => 'q',
134
            'format' => 'fm',
135
            'watermark' => 'mark',
136
            'watermarkWidth' => 'markw',
137
            'watermarkHeight' => 'markh',
138
            'watermarkFit' => 'markfit',
139
            'watermarkPaddingX' => 'markx',
140
            'watermarkPaddingY' => 'marky',
141
            'watermarkPosition' => 'markpos',
142
            'watermarkOpacity' => 'markalpha',
143
        ];
144
145
        if (! isset($conversions[$manipulationName])) {
146
            throw CouldNotConvert::unknownManipulation($manipulationName);
147
        }
148
149
        return $conversions[$manipulationName];
150
    }
151
}
152