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 (#66)
by
unknown
01:59
created

Image::setTemporaryDirectory()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 5
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
namespace Spatie\Image;
4
5
use BadMethodCallException;
6
use Spatie\Image\Exceptions\InvalidImageDriver;
7
use Spatie\ImageOptimizer\OptimizerChainFactory;
8
use Intervention\Image\ImageManagerStatic as InterventionImage;
9
10
/** @mixin \Spatie\Image\Manipulations */
11
class Image
12
{
13
    /** @var string */
14
    protected $pathToImage;
15
16
    /** @var \Spatie\Image\Manipulations */
17
    protected $manipulations;
18
19
    protected $imageDriver = 'gd';
20
21
    protected $temporaryDirectory = null;
22
23
    /**
24
     * @param string $pathToImage
25
     *
26
     * @return static
27
     */
28
    public static function load(string $pathToImage)
29
    {
30
        return new static($pathToImage);
31
    }
32
33
    public function setTemporaryDirectory($tempDir)
34
    {
35
        $this->temporaryDirectory = $tempDir;
36
        return $this;
37
    }
38
39
    public function __construct(string $pathToImage)
40
    {
41
        $this->pathToImage = $pathToImage;
42
        $this->manipulations = new Manipulations();
43
        if (! isset($this->temporaryDirectory)) {
44
            $this->setTemporaryDirectory(sys_get_temp_dir());
45
        }
46
    }
47
48
    /**
49
     * @param string $imageDriver
50
     *
51
     * @return $this
52
     *
53
     * @throws InvalidImageDriver
54
     */
55
    public function useImageDriver(string $imageDriver)
56
    {
57
        if (! in_array($imageDriver, ['gd', 'imagick'])) {
58
            throw InvalidImageDriver::driver($imageDriver);
59
        }
60
61
        $this->imageDriver = $imageDriver;
62
63
        InterventionImage::configure([
64
            'driver' => $this->imageDriver,
65
        ]);
66
67
        return $this;
68
    }
69
70
    /**
71
     * @param callable|$manipulations
72
     *
73
     * @return $this
74
     */
75
    public function manipulate($manipulations)
76
    {
77
        if (is_callable($manipulations)) {
78
            $manipulations($this->manipulations);
79
        }
80
81
        if ($manipulations instanceof Manipulations) {
82
            $this->manipulations->mergeManipulations($manipulations);
0 ignored issues
show
Documentation introduced by
$manipulations is of type object<Spatie\Image\Manipulations>, but the function expects a object<self>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
83
        }
84
85
        return $this;
86
    }
87
88
    public function __call($name, $arguments)
89
    {
90
        if (! method_exists($this->manipulations, $name)) {
91
            throw new BadMethodCallException("Manipulation `{$name}` does not exist");
92
        }
93
94
        $this->manipulations->$name(...$arguments);
95
96
        return $this;
97
    }
98
99
    public function getWidth(): int
100
    {
101
        return InterventionImage::make($this->pathToImage)->width();
102
    }
103
104
    public function getHeight(): int
105
    {
106
        return InterventionImage::make($this->pathToImage)->height();
107
    }
108
109
    public function getManipulationSequence(): ManipulationSequence
110
    {
111
        return $this->manipulations->getManipulationSequence();
112
    }
113
114
    public function save($outputPath = '')
115
    {
116
        if ($outputPath == '') {
117
            $outputPath = $this->pathToImage;
118
        }
119
120
        $this->addFormatManipulation($outputPath);
121
122
        GlideConversion::create($this->pathToImage)
123
            ->setTemporaryDirectory($this->temporaryDirectory)
124
            ->useImageDriver($this->imageDriver)
125
            ->performManipulations($this->manipulations)
126
            ->save($outputPath);
127
128
        if ($this->shouldOptimize()) {
129
            $optimizerChainConfiguration = $this->manipulations->getFirstManipulationArgument('optimize');
130
131
            $optimizerChainConfiguration = json_decode($optimizerChainConfiguration, true);
132
133
            $this->performOptimization($outputPath, $optimizerChainConfiguration);
134
        }
135
    }
136
137
    protected function shouldOptimize(): bool
138
    {
139
        return ! is_null($this->manipulations->getFirstManipulationArgument('optimize'));
140
    }
141
142
    protected function performOptimization($path, array $optimizerChainConfiguration)
143
    {
144
        $optimizerChain = OptimizerChainFactory::create();
145
146
        if (count($optimizerChainConfiguration)) {
147
            $optimizers = array_map(function (array $optimizerOptions, string $optimizerClassName) {
148
                return (new $optimizerClassName)->setOptions($optimizerOptions);
149
            }, $optimizerChainConfiguration, array_keys($optimizerChainConfiguration));
150
151
            $optimizerChain->setOptimizers($optimizers);
152
        }
153
154
        $optimizerChain->optimize($path);
155
    }
156
157
    protected function addFormatManipulation($outputPath)
158
    {
159
        if ($this->manipulations->hasManipulation('format')) {
160
            return;
161
        }
162
163
        $inputExtension = strtolower(pathinfo($this->pathToImage, PATHINFO_EXTENSION));
164
        $outputExtension = strtolower(pathinfo($outputPath, PATHINFO_EXTENSION));
165
166
        if ($inputExtension === $outputExtension) {
167
            return;
168
        }
169
170
        $supportedFormats = ['jpg', 'png', 'gif'];
171
172
        if (in_array($outputExtension, $supportedFormats)) {
173
            $this->manipulations->format($outputExtension);
174
        }
175
    }
176
}
177