Skip to content

Commit

Permalink
Merge pull request #633 from mollie/release/2.24.1
Browse files Browse the repository at this point in the history
Release/2.24.1
  • Loading branch information
Marvin-Magmodules authored Apr 17, 2023
2 parents 2d52959 + 06b3bb1 commit fec00e2
Show file tree
Hide file tree
Showing 11 changed files with 513 additions and 39 deletions.
26 changes: 17 additions & 9 deletions Controller/Adminhtml/Action/VersionCheck.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,13 @@ public function execute()
$changeLog = [];
if ($result) {
$data = $this->json->unserialize($result);
$versions = array_keys($data);
$latest = reset($versions);
foreach ($data as $version => $changes) {
if ('v' . $version == $this->config->getVersion()) {
$latest = $data[0]['tag_name'];
foreach ($data as $release) {
if ($release['tag_name'] == $this->config->getVersion()) {
break;
}
$changeLog[] = [
$version => $changes['changelog']
$release['tag_name'] => $release['body']
];
}
}
Expand All @@ -82,11 +81,20 @@ public function execute()
private function getVersions()
{
try {
// Github required a User-Agent
$options = [
'http' => [
'method' => 'GET',
'header' => [
'User-Agent: PHP'
]
]
];

return $this->file->fileGetContents(
sprintf(
'http://version.magmodules.eu/%s.json',
Config::EXTENSION_CODE
)
'https://api.github.com/repos/mollie/magento2/releases',
null,
stream_context_create($options)
);
} catch (\Exception $exception) {
return '';
Expand Down
39 changes: 15 additions & 24 deletions Controller/Adminhtml/Log/Debug.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,9 @@

use Exception;
use Magento\Backend\App\Action;
use Magento\Framework\App\ResponseInterface;
use Magento\Framework\Controller\Result\JsonFactory;
use Magento\Framework\Controller\ResultInterface;
use Magento\Framework\Exception\FileSystemException;
use Magento\Framework\Filesystem\DirectoryList;
use Magento\Framework\Filesystem\Driver\File;
use Magento\Framework\Serialize\Serializer\Json as SerializerJson;

class Debug extends Action
{
Expand All @@ -24,6 +20,11 @@ class Debug extends Action
*/
const DEBUG_LOG_FILE = '%s/log/mollie.log';

/**
* Limit stream size to 100 lines
*/
public const MAX_LINES = 100;

/**
* @var JsonFactory
*/
Expand All @@ -39,22 +40,15 @@ class Debug extends Action
*/
private $file;

/**
* @var SerializerJson
*/
private $serializerJson;

public function __construct(
Action\Context $context,
JsonFactory $resultJsonFactory,
DirectoryList $dir,
File $file,
SerializerJson $serializerJson
File $file
) {
$this->resultJsonFactory = $resultJsonFactory;
$this->dir = $dir;
$this->file = $file;
$this->serializerJson = $serializerJson;
parent::__construct($context);
}

Expand Down Expand Up @@ -82,28 +76,25 @@ private function isLogExists(string $file): bool
private function prepareLogText(string $file): array
{
$logFile = sprintf($file, $this->dir->getPath('var'));
$fileContent = explode(PHP_EOL, $this->file->fileGetContents($logFile));
if (count($fileContent) > 100) {
$fileContent = array_slice($fileContent, -100, 100, true);
}
$file = $this->file->fileOpen($logFile, 'r');
$count = 0;

$result = [];
foreach ($fileContent as $line) {
// phpcs:ignore Magento2.Functions.DiscouragedFunction
while (($line = fgets($file)) !== false && $count < self::MAX_LINES) {
$data = explode('] ', $line);
$date = ltrim(array_shift($data), '[');
$data = implode('] ', $data);
$data = explode(': ', $data);
array_shift($data);

if (!$data) {
continue;
}

$result[] = [
'date' => $date,
'msg' => implode(': ', $data),
'msg' => implode(': ', $data)
];
$count++;
}

return array_reverse($result);
$this->file->fileClose($file);
return $result;
}
}
18 changes: 15 additions & 3 deletions Service/Order/TransactionPart/PhoneNumber.php
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,15 @@ public function process(OrderInterface $order, $apiMethod, array $transaction)
$countryCode = $address->getCountryId();
$phoneNumber = $address->getTelephone();

$transaction['billingAddress']['phone'] = $this->formatInE164($countryCode, $phoneNumber);
if (empty($phoneNumber)) {
return $transaction;
}

try {
$transaction['billingAddress']['phone'] = $this->formatInE164($countryCode, $phoneNumber);
} catch (\InvalidArgumentException $exception) {
// Silently ignore the exception
}

return $transaction;
}
Expand All @@ -281,8 +289,8 @@ private function formatInE164(string $countryCodeIso2, string $phoneNumber): str

$countryCode = self::COUNTRY_CODE_MAPPING[$countryCodeIso2];

$phoneNumber = preg_replace( '/^\+' . $countryCode . '/', '', $phoneNumber);
$phoneNumber = preg_replace( '/^00' . $countryCode . '/', '', $phoneNumber);
$phoneNumber = preg_replace('/^\+' . $countryCode . '/', '', $phoneNumber);
$phoneNumber = preg_replace('/^00' . $countryCode . '/', '', $phoneNumber);

$formattedNumber = preg_replace('/\D/', '', $phoneNumber);

Expand All @@ -292,6 +300,10 @@ private function formatInE164(string $countryCodeIso2, string $phoneNumber): str
// Add the '+' sign and the country code to the beginning of the formatted number
$formattedNumber = '+' . $countryCode . $formattedNumber;

if (strlen($formattedNumber) <= 3 || !preg_match('/^\+[1-9]\d{1,14}$/', $formattedNumber)) {
throw new \InvalidArgumentException(__('Phone number "%s" is not valid', $formattedNumber));
}

return $formattedNumber;
}
}
47 changes: 47 additions & 0 deletions Test/Integration/Service/Order/TransactionPart/PhoneNumberTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Mollie\Payment\Test\Integration\Service\Order\TransactionPart;

use Magento\Sales\Api\Data\OrderAddressInterface;
use Magento\Sales\Api\Data\OrderInterface;
use Mollie\Payment\Model\Client\Orders;
use Mollie\Payment\Model\Client\Payments;
Expand Down Expand Up @@ -56,6 +57,52 @@ public function testConvertsPhoneNumbersToTheCorrectFormat(
$this->assertSame($expected, $transaction['billingAddress']['phone']);
}

/**
* @magentoDataFixture Magento/Sales/_files/order.php
* @return void
*/
public function testDoesNotAddThePhoneNumberWhenItsEmpty(): void
{
$order = $this->loadOrder('100000001');
$billingAddress = $order->getBillingAddress();
$billingAddress->setCountryId('NL');
$billingAddress->setTelephone('');

/** @var PhoneNumber $instance */
$instance = $this->objectManager->create(PhoneNumber::class);

$transaction = $instance->process(
$order,
Orders::CHECKOUT_TYPE,
['billingAddress' => []]
);

$this->assertArrayNotHasKey('phone', $transaction['billingAddress']);
}

/**
* @magentoDataFixture Magento/Sales/_files/order.php
* @return void
*/
public function testHandlesNullAsPhonenumber(): void
{
$order = $this->loadOrder('100000001');
$billingAddress = $order->getBillingAddress();
$billingAddress->setCountryId('NL');
$billingAddress->setData(OrderAddressInterface::TELEPHONE, null);

/** @var PhoneNumber $instance */
$instance = $this->objectManager->create(PhoneNumber::class);

$transaction = $instance->process(
$order,
Orders::CHECKOUT_TYPE,
['billingAddress' => []]
);

$this->assertArrayNotHasKey('phone', $transaction['billingAddress']);
}

public function convertsPhoneNumbersToTheCorrectFormatDataProvider(): array
{
return [
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "mollie/magento2",
"description": "Mollie Payment Module for Magento 2",
"version": "2.24.0",
"version": "2.24.1",
"keywords": [
"mollie",
"payment",
Expand Down
2 changes: 1 addition & 1 deletion etc/config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<default>
<payment>
<mollie_general>
<version>v2.24.0</version>
<version>v2.24.1</version>
<active>0</active>
<enabled>0</enabled>
<type>test</type>
Expand Down
83 changes: 83 additions & 0 deletions i18n/de_DE.csv
Original file line number Diff line number Diff line change
Expand Up @@ -308,3 +308,86 @@
"CVC/CVV","CVC/CVV"
"Save for later use.","Für spätere Verwendung speichern."
"Place Order","Jetzt kaufen"
"Warning: This order is (partially) paid using a voucher. You can refund a maximum of %1.","Achtung: Diese Bestellung wurde (teilweise) mit einem Gutschein bezahlt. Sie können maximal %1 erstatten."
"Failed to initialize product","Produktinitialisierung fehlgeschlagen"
"Your session has expired","Ihre Sitzung ist abgelaufen"
"Product not found","Produkt nicht gefunden"
"We can't add this item to your shopping cart right now.","Wir können diesen Artikel derzeit nicht Ihrem Warenkorb hinzufügen."
"The webhook URL is invalid because it is unreachable from Mollie's point of view. View this article for more information: https://github.com/mollie/magento2/wiki/Webhook-Communication-between-your-Magento-webshop-and-Mollie","Die Webhook-URL ist ungültig, da sie aus Sicht von Mollie nicht erreichbar ist. Lesen Sie diesen Artikel für weitere Informationen: https://github.com/mollie/magento2/wiki/Webhook-Communication-between-your-Magento-webshop-and-Mollie"
"Required parameter ""cart_id"" is missing","Erforderlicher Parameter ""cart_id"" fehlt"
"The current user cannot perform operations on cart ""%masked_cart_id""","Der aktuelle Benutzer kann keine Operationen am Warenkorb ""%masked_cart_id"" durchführen"
"Missing ""payment_token"" input argument","Fehlendes Eingabeargument ""payment_token"""
"No order found with token ""%1""","Keine Bestellung mit Token ""%1"" gefunden"
"Setting the default method does not work when the One Step Checkout extension is enabled. Please see Sales -> OneStepCheckout -> Payment method defaults for the same effect.","Das Festlegen der Standardmethode funktioniert nicht, wenn die One Step Checkout-Erweiterung aktiviert ist. Siehe Verkauf -> OneStepCheckout -> Standard-Zahlungsmethoden für den gleichen Effekt."
"The description to be used for this transaction. These variables are available:<br><br><strong>{ordernumber}</strong>: The order number for this transaction.<br><strong>{storename}</strong>: The name of the store.<br><strong>{customerid}</strong>: The ID of the customer. Is empty when the customer is a guest.<br><br>(Note: This only works when the method is set to Payments API)","Die für diese Transaktion zu verwendende Beschreibung. Diese Variablen sind verfügbar:<br><br><strong>{ordernumber}</strong>: Die Bestellnummer für diese Transaktion.<br><strong>{storename}</strong>: Der Name des Geschäfts.<br><strong>{customerid}</strong>: Die ID des Kunden. Ist leer, wenn der Kunde ein Gast ist.<br><br>(Hinweis: Dies funktioniert nur, wenn die Methode auf Payments API eingestellt ist)"
"The current value starts with <strong>%1</strong> and ends on <strong>%2</strong>","Der aktuelle Wert beginnt mit <strong>%1</strong> und endet mit <strong>%2</strong>"
Black,Schwarz
White,Weiß
"White Outline","Weißer Umriss"
Buy,Kaufen
Donate,Spenden
Plain,Einfach
Book,Buchen
"Check out","Zur Kasse"
Subscribe,Abonnieren
"Add money","Geld hinzufügen"
Contribute,Beitragen
Order,Bestellen
Reload,Neu laden
Rent,Mieten
Support,Unterstützen
Tip,Trinkgeld
"Top up","Aufladen"
"Redirect to cart","Zum Warenkorb weiterleiten"
"Redirect to checkout (shipping)","Weiterleitung zur Kasse (Versand)"
"Redirect to checkout (payment)","Weiterleitung zur Kasse (Zahlung)"
"Use the method of the original order","Die Methode der ursprünglichen Bestellung verwenden"
"Could not save the apiKeyFallback: %1","ApiKeyFallback konnte nicht gespeichert werden: %1"
"ApiKeyFallback with id ""%1"" does not exist.","ApiKeyFallback mit ID ""%1"" existiert nicht."
"Could not delete the ApiKeyFallback: %1","ApiKeyFallback konnte nicht gelöscht werden: %1"
"Unable to create online refund, as shipping costs do not match","Online-Erstattung kann nicht erstellt werden, da die Versandkosten nicht übereinstimmen"
"""%1"" does not implement %1","""%1"" implementiert %1 nicht"
"Unable to process order %s","Bestellung %s kann nicht verarbeitet werden"
"No order(s) found for transaction id %1","Keine Bestellung(en) für Transaktions-ID %1 gefunden"
"Could not save the transactionToOrder: %1","TransactionToOrder konnte nicht gespeichert werden: %1"
"TransactionToOrder with id ""%1"" does not exist.","TransactionToOrder mit ID ""%1"" existiert nicht."
"Could not delete the TransactionToOrder: %1","TransactionToOrder konnte nicht gelöscht werden: %1"
"Unable to get lock for %1","Sperre für %1 kann nicht abgerufen werden"
"No info_buyRequest option found","Keine info_buyRequest-Option gefunden"
"No metadata found for order %1","Keine Metadaten für Bestellung %1 gefunden"
"Order ID does not match","Bestell-ID stimmt nicht überein"
"Magento Gift Card","Magento Geschenkkarte"
"Magento Gift Wrapping","Magento Geschenkverpackung"
"We were unable to find the store credit for order #%1","Wir konnten das Geschäftsguthaben für Bestellung #%1 nicht finden"
"The orders have different currencies (%1)","Die Bestellungen haben unterschiedliche Währungen (%1)"
"If only one method is chosen, the selection screen is skipped and the customer is sent directly to the payment method.","Wenn nur eine Methode ausgewählt ist, wird der Auswahlbildschirm übersprungen und der Kunde direkt zur Zahlungsmethode weitergeleitet."
"It is not possible to use Klarna Slice it or Klarna Pay later as method when your expiry date is more than 28 days, unless another maximum is agreed between the merchant and Klarna.","Es ist nicht möglich, Klarna Slice it oder Klarna Pay später als Methode zu verwenden, wenn Ihr Ablaufdatum mehr als 28 Tage beträgt, es sei denn, ein anderer Höchstwert wurde zwischen dem Händler und Klarna vereinbart."
"%1 using Voucher, %2 direct.","%1 mit Gutschein, %2 direkt."
"Name on card","Name auf der Karte"
CVC/CVV,CVC/CVV
"Save for later use.","Für späteren Gebrauch speichern."
"Place Order","Bestellung aufgeben"
ending,Ende
"Last 100 debug log lines","Letzte 100 Debug-Protokollzeilen"
"Download as .txt file","Als .txt-Datei herunterladen"
"Last 100 error log records","Letzte 100 Fehlerprotokolleinträge"
"Mollie Configuration","Mollie Konfiguration"
"Sort Order","Sortierreihenfolge"
"Apple Pay Direct","Apple Pay Direkt"
"Activating this option will allow placing the Apple Pay button directly on the product detail pages for a faster checkout.","Durch Aktivieren dieser Option wird der Apple Pay-Button direkt auf den Produktdetailseiten für eine schnellere Kasse platziert."
"Enable Button on Product Page","Schaltfläche auf Produktseite aktivieren"
"Buy Now Button Style","Jetzt kaufen Button-Style"
"Buy Now Button Type","Jetzt kaufen Button-Typ"
"Enable Button in minicart","Schaltfläche im Minicart aktivieren"
"Minicart Button Style","Minicart Button-Style"
"Minicart Button Type","Minicart Button-Typ"
"Enable Magento Vault","Magento Vault aktivieren"
"When do you want to create the invoice for <strong>Klarna</strong> or <strong>Billie</strong> payments?<br><strong>On Authorize</strong>: Create a full invoice when the order is authorized.<br><strong>On Shipment</strong>: Create a (partial) invoice when a shipment is created.","Wann möchten Sie die Rechnung für <strong>Klarna</strong> oder <strong>Billie</strong> Zahlungen erstellen?<br><strong>Bei Autorisierung</strong>: Erstellen Sie eine vollständige Rechnung, wenn die Bestellung autorisiert ist.<br><strong>Bei Versand</strong>: Erstellen Sie eine (teilweise) Rechnung, wenn eine Sendung erstellt wird."
"Set to yes to send the invoice email to the customer after the invoice is created.","Auf Ja setzen, um die Rechnungs-E-Mail an den Kunden zu senden, nachdem die Rechnung erstellt wurde."
"Redirect user when redirect fails","Benutzer umleiten, wenn die Weiterleitung fehlschlägt"
"<strong>Autodetect:</strong> Let Mollie detect the locale depending on the user. However, the locale from the current store view is used when using the Orders API for the used payment method.<br> <strong>Store Locale</strong>: Use the locale active in the current store or fall back to English if this can't be determined.","<strong>Automatische Erkennung:</strong> Lassen Sie Mollie die Gebietsschemaabhängigkeit vom Benutzer erkennen. Die Gebietsschemaeinstellung der aktuellen Shop-Ansicht wird jedoch verwendet, wenn die Orders API für die verwendete Zahlungsmethode verwendet wird.<br> <strong>Shop-Gebietsschema</strong>: Verwenden Sie das im aktuellen Shop aktive Gebietsschema oder wechseln Sie zu Englisch, wenn dies nicht festgestellt werden kann."
"Use webhooks","Webhooks verwenden"
"Custom webhook url","Benutzerdefinierte Webhook-URL"
"Encrypt payment details","Zahlungsdetails verschlüsseln"
"Send an e-mail to customers with a failed or unfinished payment to give them a second chance on finishing the payment through the PaymentLink and revive their order.<br>You can either send these payment reminders manually or activate the e-mail fully automated.","Senden Sie eine E-Mail an Kunden mit einer fehlgeschlagenen oder unvollständigen Zahlung, um ihnen eine zweite Chance zu geben, die Zahlung über den PaymentLink abzuschließen und ihre Bestellung wiederzubeleben.<br>Sie können diese Zahlungserinnerungen entweder manuellsenden oder die E-Mail vollständig automatisiert aktivieren."
"Payment Method To Use For Second Change Payments","Zahlungsmethode für Zahlungen bei zweiter Änderung verwenden"
Loading

0 comments on commit fec00e2

Please sign in to comment.