Completed
Push — v3.2.x ( c8fcb2...952323 )
by smiley
02:13
created

QRFpdf::dump()   B

Complexity

Conditions 6
Paths 8

Size

Total Lines 32

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 6
nc 8
nop 1
dl 0
loc 32
rs 8.7857
c 0
b 0
f 0
1
<?php
2
/**
3
 * Class QRFpdf
4
 *
5
 * https://github.com/chillerlan/php-qrcode/pull/49
6
 *
7
 * @filesource   QRFpdf.php
8
 * @created      03.06.2020
9
 * @package      chillerlan\QRCode\Output
10
 * @author       Maximilian Kresse
11
 *
12
 * @license      MIT
13
 */
14
15
namespace chillerlan\QRCode\Output;
16
17
use chillerlan\QRCode\Data\QRMatrix;
18
use chillerlan\QRCode\QRCodeException;
19
use chillerlan\Settings\SettingsContainerInterface;
20
use FPDF;
21
22
use function array_values, class_exists, count, is_array;
23
24
/**
25
 * QRFpdf output module (requires fpdf)
26
 *
27
 * @see https://github.com/Setasign/FPDF
28
 * @see http://www.fpdf.org/
29
 */
30
class QRFpdf extends QROutputAbstract{
31
32
	public function __construct(SettingsContainerInterface $options, QRMatrix $matrix){
33
34
		if(!class_exists(FPDF::class)){
35
			// @codeCoverageIgnoreStart
36
			throw new QRCodeException(
37
				'The QRFpdf output requires FPDF as dependency but the class "\FPDF" couldn\'t be found.'
38
			);
39
			// @codeCoverageIgnoreEnd
40
		}
41
42
		parent::__construct($options, $matrix);
43
	}
44
45
	/**
46
	 * @inheritDoc
47
	 */
48
	protected function setModuleValues():void{
49
50
		foreach($this::DEFAULT_MODULE_VALUES as $M_TYPE => $defaultValue){
51
			$v = $this->options->moduleValues[$M_TYPE] ?? null;
52
53
			if(!is_array($v) || count($v) < 3){
54
				$this->moduleValues[$M_TYPE] = $defaultValue
55
					? [0, 0, 0]
56
					: [255, 255, 255];
57
			}
58
			else{
59
				$this->moduleValues[$M_TYPE] = array_values($v);
60
			}
61
62
		}
63
64
	}
65
66
	/**
67
	 * @inheritDoc
68
	 */
69
	public function dump(string $file = null):string{
70
		$file = $file ?? $this->options->cachefile;
71
72
		$fpdf = new FPDF('P', $this->options->fpdfMeasureUnit, [$this->length, $this->length]);
0 ignored issues
show
Documentation introduced by
array($this->length, $this->length) is of type array<integer,integer,{"...nteger","1":"integer"}>, but the function expects a string.

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...
73
		$fpdf->AddPage();
74
75
		$prevColor = null;
76
77
		foreach($this->matrix->matrix() as $y => $row){
78
79
			foreach($row as $x => $M_TYPE){
80
				/** @var int $M_TYPE */
81
				$color = $this->moduleValues[$M_TYPE];
82
83
				if($prevColor === null || $prevColor !== $color){
84
					$fpdf->SetFillColor(...$color);
85
					$prevColor = $color;
86
				}
87
88
				$fpdf->Rect($x * $this->scale, $y * $this->scale, 1 * $this->scale, 1 * $this->scale, 'F');
89
			}
90
91
		}
92
93
		$pdfData = $fpdf->Output('S');
94
95
		if($file !== null){
96
			$this->saveToFile($pdfData, $file);
97
		}
98
99
		return $pdfData;
100
	}
101
102
}
103