Files
wyczarujprezent.pl/modules/thecheckout/classes/CheckoutCustomerAddressPersister.php
Jacek Pyziak d39433f0d4 Add new payment and shipping parsers for various integrations
- Implemented Google Pay parser in bongooglepay.js
- Added Buckaroo 3 payment parser in buckaroo3.js
- Introduced DataTrans CW Mastercard parser in datatranscw.js
- Created DataTrans CW Credit Card parser in datatranscw_creditcard.js
- Developed DHL Assistant shipping parser in dhlassistant.js
- Added Estimated Delivery parser in estimateddelivery.js
- Implemented Floapay payment parser in floapay.js
- Created FS Pickup at Store shipping parser in fspickupatstore.js
- Developed Generic Iframe parser in generic_iframe_parser.js
- Added Geodis Officiel shipping parser in geodisofficiel.js
- Implemented Glob Kurier module shipping parser in globkuriermodule.js
- Created Latvija Post Express Pickup Terminal parser in latvijaspastsexpresspastspostterminalslv.js
- Developed LP Shipping parser in lpshipping.js
- Added Mijora Venipak parser in mijoravenipak.js
- Implemented Apple Pay parser in pm_applepay.js
- Created Przelewy24 payment parser in przelewy24.js
- Developed Pshugls shipping parser in pshugls.js
- Added Redsys Insite payment parser in redsysinsite.js
- Implemented Tpay payment parser in tpay.js
- Updated third-party integration documentation for FedEx DotCom
2025-08-04 23:10:27 +02:00

150 lines
4.2 KiB
PHP

<?php
/**
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* https://opensource.org/licenses/OSL-3.0
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright PrestaShop SA
* @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
if (!defined('_PS_VERSION_')) {
exit;
}
class CheckoutCustomerAddressPersister
{
private $customer;
private $token;
private $cart;
public function __construct(Customer $customer, Cart $cart, $token)
{
$this->customer = $customer;
$this->cart = $cart;
$this->token = $token;
}
public function getToken()
{
return $this->token;
}
private function authorizeChange(Address $address, $token)
{
if ($address->id_customer && (int)$address->id_customer !== (int)$this->customer->id) {
// Can't touch anybody else's address
return false;
}
if ($token !== $this->token) {
// XSS?
return false;
}
return true;
}
public function areAddressesDifferent($address1, $address2)
{
// compare following fields:
$compareFields = array(
'id_customer',
'id_country',
'id_state',
'country',
'company',
'lastname',
'firstname',
'address1',
'address2',
'postcode',
'city',
'other',
'phone',
'phone_mobile',
'vat_number',
'dni'
);
foreach ($compareFields as $field) {
if ($address1->{$field} != $address2->{$field}) {
return true;
}
}
return false;
}
public function save(Address $address, $token, $attachCustomerId = true)
{
if (!$this->authorizeChange($address, $token)) {
return false;
}
if ($attachCustomerId) {
$address->id_customer = $this->customer->id;
}
if ($address->id && $address->isUsed()) {
$old_address = new Address($address->id);
if ($this->areAddressesDifferent($old_address, $address)) {
$address->id = $address->id_address = null;
try {
$old_address->delete();
} catch (Exception $e) {
// Special treatment for 'dni' field - if it's not set in old (to be deleted) address ,BUT, required now on country level
if (strpos($e->getMessage(), 'dni')) {
// Retry deletion with DNI set from new address
$old_address->dni = $address->dni;
$old_address->delete();
}
}
return $address->save();
}
}
return $address->save();
}
public function delete(Address $address, $token)
{
if (!$this->authorizeChange($address, $token)) {
return false;
}
$id = $address->id;
$ok = $address->delete();
if ($ok) {
if ($this->cart->id_address_invoice == $id) {
unset($this->cart->id_address_invoice);
}
if ($this->cart->id_address_delivery == $id) {
unset($this->cart->id_address_delivery);
$this->cart->updateAddressId(
$id,
Address::getFirstCustomerAddressId($this->customer->id)
);
}
}
return $ok;
}
}