Skip to content

Commit 8a3e43d

Browse files
Merge pull request #18 from reyesoft/changed/changed-version-endroid
changed/changed-version-endroid auto-commit
2 parents 311c0e3 + ae45680 commit 8a3e43d

File tree

9 files changed

+105
-29
lines changed

9 files changed

+105
-29
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
66

77
## [Unreleased]
88

9+
## [2.0.0] - 2024-12-05
10+
11+
### Updated
12+
- Upgraded the QR code generation library to the latest version of endroid/qr-code.
13+
14+
### Changed
15+
- Refactored the implementation of QR code generation to align with the updated library.
16+
- Breaking change: Applications using this library must update their QR generation code to ensure compatibility with the new implementation.
17+
918
## [0.1.1] - 2021-06-02
1019

1120
### Changed

composer.json

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,21 @@
1515
}
1616
],
1717
"require": {
18-
"php": "^8.0",
19-
"endroid/qr-code": "^3.2",
18+
"php": "^8.1",
19+
"endroid/qr-code": "5.0.9",
2020
"ext-gd": "*"
2121
},
2222
"require-dev": {
2323
"reyesoft/ci": "2.0.1",
2424
"phpunit/phpunit": "^9.1.5",
25+
"khanamiryan/qrcode-detector-decoder": "^2.0",
2526
"codedungeon/phpunit-result-printer": "0.30.0"
2627
},
2728
"autoload": {
28-
"classmap": [
29+
"classmap": [
2930
"src/"
30-
],
31-
"psr-4": {
31+
],
32+
"psr-4": {
3233
"CryptoQr\\": "src/"
3334
}
3435
},

src/CryptoQr.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ protected function updateText(): void
6161
$this->getParam('label', $this->getLabel()) .
6262
$this->getParam('message', $this->getMessage());
6363

64-
$this->getQrCode()->setText(
64+
$this->getQrCode()->setData(
6565
$uri . ($params !== '' ? '?' . substr($params, 1) : '')
6666
);
6767
}

src/Qr.php

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,35 @@
1010

1111
namespace CryptoQr;
1212

13+
use Endroid\QrCode\Logo\LogoInterface;
1314
use Endroid\QrCode\QrCode;
15+
use Endroid\QrCode\Writer\PngWriter;
16+
use Endroid\QrCode\Writer\Result\ResultInterface;
1417

1518
class Qr
1619
{
1720
/**
1821
* @var string
1922
*/
2023
protected $address = '';
21-
24+
/**
25+
* @var PngWriter
26+
*/
27+
protected $writer;
28+
/**
29+
* @var LogoInterface|null
30+
*/
31+
protected $logo;
2232
/**
2333
* @var QrCode
2434
*/
2535
protected $qr_code;
2636

2737
public function __construct(string $address = '')
2838
{
29-
$this->qr_code = new QrCode();
39+
$this->qr_code = new QrCode($address);
3040
$this->setAddress($address);
41+
$this->writer = new PngWriter();
3142
}
3243

3344
public function setAddress(string $address): void
@@ -40,16 +51,41 @@ protected function updateText(): void
4051
{
4152
$uri = $this->getAddress();
4253

43-
$this->getQrCode()->setText($uri);
54+
$this->getQrCode()->setData($uri);
4455
}
4556

4657
public function getAddress(): string
4758
{
4859
return $this->address;
4960
}
5061

62+
public function setLogo(LogoInterface $logo): void
63+
{
64+
$this->logo = $logo;
65+
}
66+
5167
public function getQrCode(): QrCode
5268
{
5369
return $this->qr_code;
5470
}
71+
72+
private function writerResult(): ResultInterface
73+
{
74+
return $this->writer->write($this->getQrCode(), $this->logo);
75+
}
76+
77+
public function getString(): string
78+
{
79+
return $this->writerResult()->getString();
80+
}
81+
82+
public function getDataUri(): string
83+
{
84+
return $this->writerResult()->getDataUri();
85+
}
86+
87+
public function writeFile(string $filename): void
88+
{
89+
$this->writerResult()->saveToFile($filename);
90+
}
5591
}

tests/BitcoinQrTest.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ final class BitcoinQrTest extends TestCase
2525
public function testBitcoinQrAddress(): void
2626
{
2727
$qr = new BitcoinQr('34ZwZ4cYiwZnYquM4KW67sqT7vY88215CY');
28-
$pngData = $qr->getQrCode()->writeString();
28+
$pngData = $qr->getString();
2929

3030
$reader = new QrReader($pngData, QrReader::SOURCE_TYPE_BLOB);
3131
$this->assertSame('bitcoin:34ZwZ4cYiwZnYquM4KW67sqT7vY88215CY', $reader->text());
@@ -36,7 +36,7 @@ public function testBitcoinQrWithLabel(): void
3636
$address = '34ZwZ4cYiwZnYquM4KW67sqT7vY88215CY';
3737
$qr = new BitcoinQr($address);
3838
$qr->setLabel('Caritas');
39-
$pngData = $qr->getQrCode()->writeString();
39+
$pngData = $qr->getString();
4040

4141
$reader = new QrReader($pngData, QrReader::SOURCE_TYPE_BLOB);
4242
$this->assertSame('bitcoin:' . $address .
@@ -48,7 +48,7 @@ public function testBitcoinQrWithRequestBtc(): void
4848
$qr = new BitcoinQr('34ZwZ4cYiwZnYquM4KW67sqT7vY88215CY');
4949
$qr->setAmount(20.3);
5050
$qr->setLabel('Caritas');
51-
$pngData = $qr->getQrCode()->writeString();
51+
$pngData = $qr->getString();
5252

5353
$reader = new QrReader($pngData, QrReader::SOURCE_TYPE_BLOB);
5454
$this->assertSame(
@@ -64,7 +64,7 @@ public function testBitcoinQrWithRequestAndMessage(): void
6464
$qr = new BitcoinQr($address);
6565
$qr->setAmount(0.000023456789);
6666
$qr->setMessage($message);
67-
$pngData = $qr->getQrCode()->writeString();
67+
$pngData = $qr->getString();
6868

6969
$reader = new QrReader($pngData, QrReader::SOURCE_TYPE_BLOB);
7070
$this->assertSame(
@@ -79,7 +79,7 @@ public function testBitcoinQrWithMessage(): void
7979
$message = 'Donation for project xyz';
8080
$qr = new BitcoinQr('34ZwZ4cYiwZnYquM4KW67sqT7vY88215CY');
8181
$qr->setMessage($message);
82-
$pngData = $qr->getQrCode()->writeString();
82+
$pngData = $qr->getString();
8383

8484
$reader = new QrReader($pngData, QrReader::SOURCE_TYPE_BLOB);
8585
$this->assertSame(
@@ -97,7 +97,7 @@ public function testWriteBitcoinQrFile(): void
9797
$qr->setAmount(80);
9898
$qr->setLabel('Caritas');
9999
$qr->setMessage('Donation for project xyz');
100-
$qr->getQrCode()->writeFile($filename);
100+
$qr->writeFile($filename);
101101

102102
$image = imagecreatefromstring((string) file_get_contents($filename));
103103

tests/CryptoQrTest.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ final class CryptoQrTest extends TestCase
2525
public function testBitcoinQrAddress(): void
2626
{
2727
$qr = new BitcoinQr('34ZwZ4cYiwZnYquM4KW67sqT7vY88215CY');
28-
$pngData = $qr->getQrCode()->writeString();
28+
$pngData = $qr->getString();
2929

3030
$reader = new QrReader($pngData, QrReader::SOURCE_TYPE_BLOB);
3131
$this->assertSame('bitcoin:34ZwZ4cYiwZnYquM4KW67sqT7vY88215CY', $reader->text());
@@ -35,7 +35,7 @@ public function testQrAddressWithoutProtocol(): void
3535
{
3636
$qr = new CryptoQr('TLPF4HgzmJgQc2oDmR8Msxq4LeUfkA4n4W');
3737

38-
$pngData = $qr->getQrCode()->writeString();
38+
$pngData = $qr->getString();
3939

4040
$reader = new QrReader($pngData, QrReader::SOURCE_TYPE_BLOB);
4141
$this->assertSame('TLPF4HgzmJgQc2oDmR8Msxq4LeUfkA4n4W', $reader->text());
@@ -46,7 +46,7 @@ public function testBitcoinQrWithLabel(): void
4646
$address = '34ZwZ4cYiwZnYquM4KW67sqT7vY88215CY';
4747
$qr = new BitcoinQr($address);
4848
$qr->setLabel('Caritas');
49-
$pngData = $qr->getQrCode()->writeString();
49+
$pngData = $qr->getString();
5050

5151
$reader = new QrReader($pngData, QrReader::SOURCE_TYPE_BLOB);
5252
$this->assertSame('bitcoin:' . $address .
@@ -58,7 +58,7 @@ public function testBitcoinQrWithRequestBtc(): void
5858
$qr = new BitcoinQr('34ZwZ4cYiwZnYquM4KW67sqT7vY88215CY');
5959
$qr->setAmount(20.3);
6060
$qr->setLabel('Caritas');
61-
$pngData = $qr->getQrCode()->writeString();
61+
$pngData = $qr->getString();
6262

6363
$reader = new QrReader($pngData, QrReader::SOURCE_TYPE_BLOB);
6464
$this->assertSame(
@@ -74,7 +74,7 @@ public function testBitcoinQrWithRequestAndMessage(): void
7474
$qr = new BitcoinQr($address);
7575
$qr->setAmount(0.000023456789);
7676
$qr->setMessage($message);
77-
$pngData = $qr->getQrCode()->writeString();
77+
$pngData = $qr->getString();
7878

7979
$reader = new QrReader($pngData, QrReader::SOURCE_TYPE_BLOB);
8080
$this->assertSame(
@@ -89,7 +89,7 @@ public function testBitcoinQrWithMessage(): void
8989
$message = 'Donation for project xyz';
9090
$qr = new BitcoinQr('34ZwZ4cYiwZnYquM4KW67sqT7vY88215CY');
9191
$qr->setMessage($message);
92-
$pngData = $qr->getQrCode()->writeString();
92+
$pngData = $qr->getString();
9393

9494
$reader = new QrReader($pngData, QrReader::SOURCE_TYPE_BLOB);
9595
$this->assertSame(
@@ -107,7 +107,7 @@ public function testWriteBitcoinQrFile(): void
107107
$qr->setAmount(80);
108108
$qr->setLabel('Caritas');
109109
$qr->setMessage('Donation for project xyz');
110-
$qr->getQrCode()->writeFile($filename);
110+
$qr->writeFile($filename);
111111

112112
$image = imagecreatefromstring((string) file_get_contents($filename));
113113

tests/EthereumQrTest.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ final class EthereumQrTest extends TestCase
2424
public function testEthereumQrAddress(): void
2525
{
2626
$qr = new EthereumQr('0xe8ecDFacE0b274042aAD072149eEc3e232586499');
27-
$pngData = $qr->getQrCode()->writeString();
27+
$pngData = $qr->getString();
2828

2929
$reader = new QrReader($pngData, QrReader::SOURCE_TYPE_BLOB);
3030
$this->assertSame('ethereum:0xe8ecDFacE0b274042aAD072149eEc3e232586499', $reader->text());
@@ -35,7 +35,7 @@ public function testEthereumQrWithLabel(): void
3535
$address = '0xe8ecDFacE0b274042aAD072149eEc3e232586499';
3636
$qr = new EthereumQr($address);
3737
$qr->setLabel('Caritas');
38-
$pngData = $qr->getQrCode()->writeString();
38+
$pngData = $qr->getString();
3939

4040
$reader = new QrReader($pngData, QrReader::SOURCE_TYPE_BLOB);
4141
$this->assertSame('ethereum:' . $address .
@@ -47,7 +47,7 @@ public function testEthereumQrWithRequestEth(): void
4747
$qr = new EthereumQr('0xe8ecDFacE0b274042aAD072149eEc3e232586499');
4848
$qr->setAmount(20.3);
4949
$qr->setLabel('Caritas');
50-
$pngData = $qr->getQrCode()->writeString();
50+
$pngData = $qr->getString();
5151

5252
$reader = new QrReader($pngData, QrReader::SOURCE_TYPE_BLOB);
5353
$this->assertSame(
@@ -63,7 +63,7 @@ public function testEthereumQrWithRequestAndMessage(): void
6363
$qr = new EthereumQr($address);
6464
$qr->setAmount(0.000023456789);
6565
$qr->setMessage($message);
66-
$pngData = $qr->getQrCode()->writeString();
66+
$pngData = $qr->getString();
6767

6868
$reader = new QrReader($pngData, QrReader::SOURCE_TYPE_BLOB);
6969
$this->assertSame(
@@ -78,7 +78,7 @@ public function testEthereumQrWithMessage(): void
7878
$message = 'Donation for project xyz';
7979
$qr = new EthereumQr('0xe8ecDFacE0b274042aAD072149eEc3e232586499');
8080
$qr->setMessage($message);
81-
$pngData = $qr->getQrCode()->writeString();
81+
$pngData = $qr->getString();
8282

8383
$reader = new QrReader($pngData, QrReader::SOURCE_TYPE_BLOB);
8484
$this->assertSame(
@@ -96,7 +96,7 @@ public function testWriteEthereumQrFile(): void
9696
$qr->setAmount(80);
9797
$qr->setLabel('Caritas');
9898
$qr->setMessage('Donation for project xyz');
99-
$qr->getQrCode()->writeFile($filename);
99+
$qr->writeFile($filename);
100100

101101
$image = imagecreatefromstring((string) file_get_contents($filename));
102102

tests/QrTest.php

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
namespace CryptoQr\Tests;
1212

1313
use CryptoQr\Qr;
14+
use Endroid\QrCode\Logo\Logo;
1415
use PHPUnit\Framework\TestCase;
1516
use Zxing\QrReader;
1617

@@ -24,9 +25,38 @@ final class QrTest extends TestCase
2425
public function testQrAddress(): void
2526
{
2627
$qr = new Qr('34ZwZ4cYiwZnYquM4KW67sqT7vY88215CY');
27-
$pngData = $qr->getQrCode()->writeString();
28+
$pngData = $qr->getString();
2829

2930
$reader = new QrReader($pngData, QrReader::SOURCE_TYPE_BLOB);
3031
$this->assertSame('34ZwZ4cYiwZnYquM4KW67sqT7vY88215CY', $reader->text());
3132
}
33+
34+
public function testQrUri(): void
35+
{
36+
$qr = new Qr('34ZwZ4cYiwZnYquM4KW67sqT7vY88215CY');
37+
$pngUri = $qr->getDataUri();
38+
39+
$this->assertNotEmpty($pngUri);
40+
}
41+
42+
public function testSetQrLogo(): void
43+
{
44+
$qr = new Qr('34ZwZ4cYiwZnYquM4KW67sqT7vY88215CY');
45+
$qr->setLogo(new Logo(__DIR__ . '/resources/img/BTC.png'));
46+
$pngUri = $qr->getDataUri();
47+
48+
$this->assertNotEmpty($pngUri);
49+
}
50+
51+
public function testWriteQrFile(): void
52+
{
53+
$filename = sys_get_temp_dir() . '/qr-code.png';
54+
55+
$qr = new Qr('34ZwZ4cYiwZnYquM4KW67sqT7vY88215CY');
56+
$qr->writeFile($filename);
57+
58+
$image = imagecreatefromstring((string) file_get_contents($filename));
59+
60+
$this->assertNotFalse($image);
61+
}
3262
}

tests/resources/img/BTC.png

10.8 KB
Loading

0 commit comments

Comments
 (0)