diff --git a/src/QrBill.php b/src/QrBill.php index 775744e..adcae86 100644 --- a/src/QrBill.php +++ b/src/QrBill.php @@ -34,6 +34,9 @@ final class QrBill implements SelfValidatableInterface private ?PaymentReference $paymentReference = null; private ?AdditionalInformation $additionalInformation = null; + /** @var array */ + private array $unsupportedCharacterReplacements = []; + /** @var AlternativeScheme[] */ private array $alternativeSchemes = []; @@ -162,10 +165,14 @@ public function addAlternativeScheme(AlternativeScheme $alternativeScheme): self return $this; } - /** - * @throws InvalidQrBillDataException - */ - public function getQrCode(?string $fileFormat = null, array $unsupportedCharacterReplacements = []): QrCode + public function setUnsupportedCharacterReplacements(array $unsupportedCharacterReplacements): self + { + $this->unsupportedCharacterReplacements = $unsupportedCharacterReplacements; + + return $this; + } + + public function getQrCode(?string $fileFormat = null): QrCode { if (!$this->isValid()) { throw new InvalidQrBillDataException( @@ -176,7 +183,7 @@ public function getQrCode(?string $fileFormat = null, array $unsupportedCharacte return QrCode::create( $this->getQrCodeContent(), $fileFormat, - $unsupportedCharacterReplacements + $this->unsupportedCharacterReplacements ); } diff --git a/src/QrCode/QrCode.php b/src/QrCode/QrCode.php index ecb58a6..c02769d 100644 --- a/src/QrCode/QrCode.php +++ b/src/QrCode/QrCode.php @@ -36,6 +36,13 @@ final class QrCode /** @var array $writerOptions */ private array $writerOptions = [SvgWriter::WRITER_OPTION_FORCE_XLINK_HREF => true]; + /** + * @param string $data + * @param string|null $fileFormat + * @param array $unsupportedCharacterReplacements + * @return self + * @throws UnsupportedFileExtensionException + */ public static function create(string $data, string $fileFormat = null, array $unsupportedCharacterReplacements = []): self { if (null === $fileFormat) { @@ -45,6 +52,12 @@ public static function create(string $data, string $fileFormat = null, array $un return new self($data, $fileFormat, $unsupportedCharacterReplacements); } + /** + * @param string $data + * @param string $fileFormat + * @param array $unsupportedCharacterReplacements + * @throws UnsupportedFileExtensionException + */ private function __construct(string $data, string $fileFormat, array $unsupportedCharacterReplacements) { $data = $this->replaceUnsupportedCharacters($data, $unsupportedCharacterReplacements); @@ -132,6 +145,11 @@ public function avoidCompactSvgs(): void } } + /** + * @param string $data + * @param array $unsupportedCharacterReplacements + * @return string + */ private function replaceUnsupportedCharacters(string $data, array $unsupportedCharacterReplacements): string { foreach ($unsupportedCharacterReplacements as $character => $replacement) { diff --git a/tests/QrBillTest.php b/tests/QrBillTest.php index 4fd8d85..7b063de 100644 --- a/tests/QrBillTest.php +++ b/tests/QrBillTest.php @@ -268,9 +268,11 @@ public function testItConsidersReplacementCharacters() 'ยป' => '"', ]; + $qrBill->setUnsupportedCharacterReplacements($unsupportedCharacterReplacements); + $this->assertStringContainsString( 'Team "We are the Champions!"', - $qrBill->getQrCode(null, $unsupportedCharacterReplacements)->getText() + $qrBill->getQrCode()->getText() ); }