Compare commits

..

3 Commits

Author SHA1 Message Date
Remo Zaros
8d42eee2c1 Correct reset function 2026-06-25 11:02:11 +02:00
Remo Zaros
29109c47d1 change version nr 2026-06-25 11:01:42 +02:00
Remo Zaros
297ba93508 Change sercure when http or https is used 2026-06-25 11:01:11 +02:00
3 changed files with 157 additions and 98 deletions

View File

@@ -40,11 +40,13 @@ function set_pppr_cookie($is_local, $street_name, $house_number, $postcode, $cit
$signature = hash_hmac('sha256', $data_string, WP_PPPR_SALT);
$cookie_value = $data_string . "|" . $signature;
$is_secure = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off');
setcookie("PPPR", $cookie_value, [
'expires' => time() + 7200,
'path' => '/',
'domain' => $_SERVER['SERVER_NAME'],
'secure' => true, // Only send over HTTPS
'secure' => $is_secure, // Only send over HTTPS
'httponly' => true, // Prevent JavaScript access
'samesite' => 'Lax' // Protect against CSRF
]);

View File

@@ -2,9 +2,9 @@
/*
* Plugin Name: Prijzen per poscodeereeks.
* Description: Producten worden gefiltered aan de hand van opgegegeven postcodereksen.Klanten met een postcode Die in de opgegegeven postcode reeks vallen zullen een lokale prijs zien. Waar iedereen die niet in de reeks vallen de overige regios prijs te zien krijgt.
* Description: Producten worden gefiltered aan de hand van opgegegeven postcodereeksen.Gebruikers met een postcode die in een opgegegeven postcodereeks valt zal een lokale prijs zien. Waar elke gebruiker met een postcode die buiten eem opgegeven reeks valt zal de reguliere prijs te zien krijgen.
* Author: Remo Zaros
* Version: 0.9.6
* Version: 0.9.8
* Text Domeain: prijs-per-postcode
*/
@@ -19,12 +19,15 @@ if (!defined("ABSPATH")) {
register_activation_hook( __FILE__, 'create_pppr_salt' );
if ( ! defined( 'WP_PPPR_SALT' ) ) {
$salt_file = ABSPATH . 'wp-pppr-salt.php';
$salt_file = __DIR__ . '/wp-pppr-salt.php';
if ( file_exists( $salt_file ) ) {
require_once $salt_file;
}else {
define("WP_PPPR_SALT", wp_salt( 'auth' ));
}
}
class PrijsPerPostcode
{
public function __construct()

View File

@@ -36,7 +36,7 @@ function show_modal()
const postcodeModal = document.querySelector("#postcode_modal");
postcodeModal.showModal();
</script>
HTML;
HTML;
}
function send_postcode_data()
@@ -135,7 +135,7 @@ function send_postcode_data()
}
});
</script>
HTML;
HTML;
}
function render_dialog_html()
@@ -259,14 +259,13 @@ function handle_postcode_modal($data)
// 5. Response sturen
if ($hasError) {
echo json_encode([
return new WP_REST_Response([
"status" => "error",
"code" => $errorCode,
"message" => $errorMessage,
"suggestions" => $result["error"]["details"]["suggestions"] ?? [],
"apirequest" => "openpostcode.nl",
]);
exit();
], 400);
}
set_pppr_cookie(
postcode_in_range($params["postcode"]),
@@ -276,11 +275,10 @@ function handle_postcode_modal($data)
$woonplaats
);
echo json_encode([
return new WP_REST_Response([
"status" => "success",
"message" => "all good",
]);
exit();
], 200);
}
function register_modal_api()
@@ -288,6 +286,7 @@ function register_modal_api()
register_rest_route("postcode-modal/v1", "submit", [
"methods" => "POST",
"callback" => "handle_postcode_modal",
"permission_callback" => "__return_true",
]);
}
@@ -397,55 +396,110 @@ function modify_checkout_with_js()
$data["street"] . " " . strtoupper($data["house_number"]);
echo <<<HTML
<script type="text/javascript" id="fill_address_fields">
jQuery(document).ready(function(\$) {
fillCheckoutFields();
\$(document.body).on('updated_checkout', fillCheckoutFields);
});
<script type="text/javascript" id="set_pppr_fields">
jQuery(document).ready(function($) {
function fillCheckoutFields() {
function lockCheckoutFields() {
if (typeof wp !== 'undefined' && wp.data && wp.data.dispatch) {
const store = 'wc/store/cart';
wp.data.dispatch(store).setShippingAddress({
first_name: '',
last_name: '',
address_1: '{$address}',
address_1: 'Tjeuke Timmermansstraat 43',
address_2: '',
city: '{$city}',
city: 'Tilburg',
state: '',
postcode: '{$postcode}',
postcode: '5041 EK',
country: 'NL',
phone: '',
email: ''
});
//make fields READONLY and ppstcode reset.
setTimeout(() => {
// make prefilled fiields readonly.
\$('#shipping-postcode, #shipping-city, #shipping-address_1')
.prop('readonly', true)
.css('background', '#f9f9f9');
const targets = '#shipping-postcode, #shipping-city, #shipping-address_1';
// create postcode reset button
$(targets).each(function() {
// Voeg readonly attribuut toe (voor toegankelijkheid)
$(this).prop('readonly', true);
$(this).css({
'background-color': '#f9f9f9',
'cursor': 'not-allowed',
'pointer-events': 'none' // Blokkeert alle muisklikken in het veld
});
});
if ($('.postcode-reset').length === 0) {
const div = document.createElement("div");
div.setAttribute("class", "postcode-reset")
div.setAttribute("class", "postcode-reset");
div.innerHTML = `
<a href="#" class="reset-postcode-show-comfirm" >Reset postcode.</a>
<span class="bevestiging"> Deze handeling leegt ook de winkelwagen. Weet je het zeker?
<a href="#" class="accept">&nbsp;&nbsp;JA&nbsp;</a>/<a href="#" class="decline">&nbsp;nee&nbsp;&nbsp;</a>
</span> `;
<a href="#" class="reset-postcode-show-comfirm" style="font-size:12px; text-decoration:underline;">Reset postcode.</a>
<span class="bevestiging" style="display:none; font-size:12px;">
Deze handeling leegt ook de winkelwagen. Weet je het zeker?
<a href="#" class="accept" style="color:red; font-weight:bold;">&nbsp;&nbsp;JA&nbsp;</a>/
<a href="#" class="decline">&nbsp;nee&nbsp;&nbsp;</a>
</span>`;
div.style.width = "100%";
document.querySelector(".wc-block-components-address-form__city").after(div);
}, 500);
document.querySelector(".wc-block-components-address-form__city")?.after(div);
$('.reset-postcode-show-comfirm').on('click', function(e) {
e.preventDefault();
$(this).hide();
$(this).next('.bevestiging').show();
});
$('.decline').on('click', function(e) {
e.preventDefault();
$(this).closest('.bevestiging').hide();
$('.reset-postcode-show-comfirm').show();
});
$('.accept').on('click', function(e) {
e.preventDefault();
$.ajax({
url: ajax_object.ajax_url,
type: 'POST',
data: {
action: 'unset_my_session', // Matches wp_ajax_ hook
nonce: ajax_object.nonce // Matches wp_create_nonce action
},
success: function(response) {
if (response.success) {
location.reload();
} else {
console.error('Server returned error:', response.data);
alert('Failed to reset session: ' + (response.data || 'Unknown error'));
}
},
error: function(xhr, status, error) {
console.error('AJAX request failed:', status, error);
console.log('Response Text:', xhr.responseText); // Check for PHP fatal errors
}
});
});
}
jQuery(document.body).trigger('update_checkout');
}, 800); // Iets langere delay voor React rendering
} else {
console.error('WooCommerce Blocks API is niet beschikbaar');
}
}
lockCheckoutFields();
let updateTimeout;
$(document.body).on('updated_checkout', function() {
clearTimeout(updateTimeout);
updateTimeout = setTimeout(lockCheckoutFields, 500);
});
});
</script>
HTML;
HTML;
}
function load_assets_reset_postcode_on_checkout()