File: /var/www/dinamo-shop/wp-content/plugins/dinamo-plugin/ajax/cart.php
<?php
add_action( 'wp_ajax_change_country', 'change_country' );
add_action( 'wp_ajax_nopriv_change_country','change_country' );
function change_country() {
$country = $_POST['country'];
WC()->customer->set_country( $country );
WC()->customer->set_billing_country( $country ); // Updated HERE Too
WC()->customer->set_shipping_country( $country );
define( 'WOOCOMMERCE_CHECKOUT', true );
define( 'WOOCOMMERCE_CART', true );
WC()->cart->calculate_totals();
WC()->cart->calculate_shipping();
$packages = WC()->shipping()->get_packages();
$shipping_price = "";
$shipping_price_eur = "";
foreach ( $packages as $i => $package ) {
$available_methods = $package['rates'];
if ($available_methods) {
foreach ($available_methods as $method) {
$shipping_price = wc_price($method->cost);
$shipping_price_eur = secondary_price_output($method->cost);
}
}
}
$base_price = wc_price(WC()->cart->total - WC()->cart->tax_total);
$base_price_eur = secondary_price_output(WC()->cart->total - WC()->cart->tax_total);
$tax_total = 0;
$tax_total_eur = 0;
foreach ( WC()->cart->get_tax_totals() as $code => $tax ) {
$tax_total = wp_kses_post($tax->formatted_amount);
$tax_total_eur = secondary_price_output($tax->amount);
}
echo wp_send_json( array(
'success' => true,
'shipping_price' => $shipping_price,
'base_price' => $base_price,
'tax_total' => $tax_total,
'cart_total' => WC()->cart->get_total(),
'shipping_price_eur' => $shipping_price_eur,
'base_price_eur' => $base_price_eur,
'tax_total_eur' => $tax_total_eur,
'cart_total_eur' => secondary_price_output(WC()->cart->total),
));
die();
}
// Get item quantity from cart by cart item key
function get_item_qty( $product ){
foreach( WC()->cart->get_cart() as $cart_item => $item )
if ( $product == $cart_item ){
return $item['quantity'];
// break;
}
return;
}
// Check if cart has free products
function get_free_product(){
$has_null = false;
foreach(WC()->cart->get_cart() as $item_key => $item){
if($item["variation"]["print_type"]){
$prod = wc_get_product($item["variation_id"]);
if($prod->get_price() == 0){
$has_null = true;
}
}
if($item["line_total"] == 0){
$has_null = true;
}
}
if($has_null){
$null_html = '
<div class="cart-error__wrap">
<img src="' . THEMEROOT . '/assets/img/Error.svg" class="cart-error__img">
<div class="cart-error__text">
<h4>Dodali ste proizvod od 0€.<br>
Ispričavamo se na grešci te Vas molimo da uklonite proizvod prije nastavka.</h4>
</div>
</div>
';
return $null_html;
}
return $has_null;
}
add_action('wp_ajax_woocommerce_ajax_add_to_cart', 'woocommerce_ajax_add_to_cart');
add_action('wp_ajax_nopriv_woocommerce_ajax_add_to_cart', 'woocommerce_ajax_add_to_cart');
function woocommerce_ajax_add_to_cart(){
$product_id = apply_filters('woocommerce_add_to_cart_product_id', absint($_POST['product_id']));
$quantity = empty($_POST['quantity']) ? 1 : wc_stock_amount($_POST['quantity']);
$variation_id = empty($_POST['variation_id']) ? 0 : absint($_POST['variation_id']);
//$passed_validation = apply_filters('woocommerce_add_to_cart_validation', true, $product_id, $quantity);
$passed_validation = true;
$product_status = get_post_status($product_id);
$product_price = get_post_meta( $product_id, '_regular_price', true);
$cart_total = WC()->cart->cart_contents_total;
$cart_items = WC()->cart->cart_contents_count;
$cart_data = array();
error_log("Looking for error");
error_log($_POST['print_option']);
if(!empty($_POST['print_option'])){
$cart_data["print_option"] = $_POST['print_option'];
$cart_data["print_sponsor"] = $_POST['print_sponsor'];
$cart_data["print_sponsor_back"] = $_POST['print_sponsor_back'];
if($_POST['print_option'] == '1'){
$cart_data["print_number"] = '1';
$cart_data["print_name"] = '1';
$cart_data["print_number_value"] = $_POST['print_number_value'];
$cart_data["print_name_value"] = $_POST['print_name_value'];
}else if($_POST['print_option'] == '2'){
$cart_data["print_number"] = $_POST['print_number'];
$cart_data["print_name"] = $_POST['print_name'];
if($_POST['print_psk']){
$cart_data["print_psk"] = $_POST['print_psk'];
} else {
$cart_data["print_psk"] = '0';
}
$cart_data["print_number_value"] = $_POST['print_number_value'];
$cart_data["print_name_value"] = $_POST['print_name_value'];
}
if($_POST["print_option"] == 1) {
if($cart_data["print_sponsor"] == '1' && $cart_data["print_sponsor_back"] == '0'){
$cart_data["print_type"] = 3; // Tisak broja, naziva i sponzora na prsima
}else if($cart_data["print_sponsor"] == '0' && $cart_data["print_sponsor_back"] == '1'){
$cart_data["print_type"] = 8; // Tisak broja, naziva i sponzora na leđima
}else if($cart_data["print_sponsor"] == '1' && $cart_data["print_sponsor_back"] == '1'){
$cart_data["print_type"] = 9; // Tisak broja, naziva, sponzora na prsima i leđima
}else if($cart_data["print_sponsor"] == '0' && $cart_data["print_sponsor_back"] == '0'){
$cart_data["print_type"] = 1; // Tisak broja i naziva
}
}else if($_POST["print_option"] == 2){
if($_POST['print_number'] == '1' && $_POST['print_name'] == '1' && $cart_data["print_sponsor"] == '1' && $cart_data["print_sponsor_back"] == '0' && $cart_data["print_psk"] == '0'){
$cart_data["print_type"] = 3; // Tisak broja, naziva i sponzora na prsima
}else if($_POST['print_number'] == '1' && $_POST['print_name'] == '1' && $cart_data["print_sponsor"] == '0' && $cart_data["print_sponsor_back"] == '1' && $cart_data["print_psk"] == '0'){
$cart_data["print_type"] = 8; // Tisak broja, naziva i sponzora na leđima
}else if($_POST['print_number'] == '1' && $_POST['print_name'] == '1' && $cart_data["print_sponsor"] == '1' && $cart_data["print_sponsor_back"] == '1' && $cart_data["print_psk"] == '0'){
$cart_data["print_type"] = 9; // Tisak broja, naziva, sponzora na prsima i leđima
}else if($_POST['print_number'] == '1' && $_POST['print_name'] == '0' && $cart_data["print_sponsor"] == '0' && $cart_data["print_sponsor_back"] == '0' && $cart_data["print_psk"] == '0'){
$cart_data["print_type"] = 2; // Tisak broja
}else if($_POST['print_number'] == '1' && $_POST['print_name'] == '1' && $cart_data["print_sponsor"] == '0' && $cart_data["print_sponsor_back"] == '0' && $cart_data["print_psk"] == '0'){
$cart_data["print_type"] = 1; // Tisak broja i naziva
}else if($_POST['print_number'] == '0' && $_POST['print_name'] == '0' && $cart_data["print_sponsor"] == '1' && $cart_data["print_sponsor_back"] == '0' && $cart_data["print_psk"] == '0'){
$cart_data["print_type"] = 4; // Tisak sponzora na prsima
}else if($_POST['print_number'] == '0' && $_POST['print_name'] == '0' && $cart_data["print_sponsor"] == '0' && $cart_data["print_sponsor_back"] == '1' && $cart_data["print_psk"] == '0'){
$cart_data["print_type"] = 10; // Tisak sponzora na leđima
}else if($_POST['print_number'] == '0' && $_POST['print_name'] == '0' && $cart_data["print_sponsor"] == '1' && $cart_data["print_sponsor_back"] == '1' && $cart_data["print_psk"] == '0'){
$cart_data["print_type"] = 11; // Tisak sponzora na prsima i leđima
}
else if($_POST['print_number'] == '1' && $_POST['print_name'] == '1' && $cart_data["print_sponsor"] == '1' && $cart_data["print_sponsor_back"] == '0' && $cart_data["print_psk"] == '1'){
$cart_data["print_type"] = 5; // Tisak broja, naziva, sponzora na prsima i psk sponzora
}else if($_POST['print_number'] == '1' && $_POST['print_name'] == '1' && $cart_data["print_sponsor"] == '0' && $cart_data["print_sponsor_back"] == '1' && $cart_data["print_psk"] == '1'){
$cart_data["print_type"] = 12; // Tisak broja, naziva, sponzora na leđima i psk sponzora
}else if($_POST['print_number'] == '1' && $_POST['print_name'] == '1' && $cart_data["print_sponsor"] == '1' && $cart_data["print_sponsor_back"] == '1' && $cart_data["print_psk"] == '1'){
$cart_data["print_type"] = 13; // Tisak broja, naziva, sponzora na prsima, leđima i psk sponzora
}
else if($_POST['print_number'] == '0' && $_POST['print_name'] == '0' && $cart_data["print_sponsor"] == '1' && $cart_data["print_sponsor_back"] == '0' && $cart_data["print_psk"] == '1'){
$cart_data["print_type"] = 6; // Tisak sponzora na prsima i psk sponzora
}else if($_POST['print_number'] == '0' && $_POST['print_name'] == '0' && $cart_data["print_sponsor"] == '0' && $cart_data["print_sponsor_back"] == '1' && $cart_data["print_psk"] == '1'){
$cart_data["print_type"] = 14; // Tisak sponzora na leđima i psk sponzora
}else if($_POST['print_number'] == '0' && $_POST['print_name'] == '0' && $cart_data["print_sponsor"] == '1' && $cart_data["print_sponsor_back"] == '1' && $cart_data["print_psk"] == '1'){
$cart_data["print_type"] = 15; // Tisak sponzora na prsima, leđima i psk sponzora
}
else if($_POST['print_number'] == '1' && $_POST['print_name'] == '1' && $cart_data["print_sponsor"] == '0' && $cart_data["print_sponsor_back"] == '0' && $cart_data["print_psk"] == '1'){
$cart_data["print_type"] = 7; // Tisak broja, naziva i psk sponzora
}
if($_POST['print_europa_league'] == "1") {
$cart_data['print_europa_league'] = 1;
}
}
}
// Check product
if($passed_validation && 'publish' === $product_status) {
$validation = true;
}else{
$validation = false;
}
$cart_item_key = WC()->cart->add_to_cart($product_id, $quantity, $variation_id, $cart_data);
if($cart_item_key && $validation) {
$in_cart = get_item_qty($cart_item_key) > 1 ? true : false;
$new_cart_items = $cart_items + $quantity;
$new_cart_total = $cart_total + ($product_price * $quantity);
$product_permalink = get_permalink($product_id);
$product_thumbnail = get_the_post_thumbnail($product_id, 'product_thumbnail_cart');
$product_name = get_the_title($product_id);
ob_start();
wc_get_template_part( 'cart/mini-cart' );
$cart_html = ob_get_contents();
ob_end_clean();
$has_null = get_free_product();
$data = array(
'success' => true,
'product_id' => $product_id,
'cart_item_key' => $cart_item_key,
'cart_total' => WC()->cart->get_cart_subtotal(),
'in_cart' => $in_cart,
'quantity' => WC()->cart->cart_contents_count,
'cart' => $cart_html,
"null_product" => $has_null,
);
} else {
$_product = wc_get_product($product_id);
$cart_id = WC()->cart->generate_cart_id( $product_id );
$cart_item_key = WC()->cart->find_product_in_cart( $cart_id );
$new_qty = get_item_qty( $cart_item_key ) + $quantity;
if ($_product->get_stock_quantity() < $new_qty) {
$data = array(
'success' => false,
'error' => true,
'message' => "Proizvod nije moguće dodati u košaricu jer trenutno nije dostupan u količini koju ste odabrali.",
'product_url' => apply_filters('woocommerce_cart_redirect_after_error', get_permalink($product_id), $product_id));
} else {
$data = array(
'success' => false,
'error' => true,
'message' => "Došlo je do nepoznate pogreške prilikom dodavanja u košaricu. Molimo pokušajte ponovo kasnije.",
'product_url' => apply_filters('woocommerce_cart_redirect_after_error', get_permalink($product_id), $product_id));
}
}
wp_send_json($data);
wp_die();
}
add_action('wp_ajax_woocommerce_ajax_get_mini_cart', 'get_mini_cart');
add_action('wp_ajax_nopriv_woocommerce_ajax_get_mini_cart', 'get_mini_cart');
function get_mini_cart(){
header('Content-Type: application/json');
ob_start();
wc_get_template_part( 'cart/mini-cart' );
$cart_html = ob_get_contents();
ob_end_clean();
$has_null = get_free_product();
wp_send_json(array(
"total" => WC()->cart->cart_contents_count ,
"cart" => $cart_html,
"null_product" => $has_null,
));
wp_die();
}
add_filter( 'wc_add_to_cart_message_html', 'remove_add_to_cart_message' );
function remove_add_to_cart_message() {
return false;
}
add_action('wp_ajax_woocommerce_ajax_delete_from_cart', 'woocommerce_ajax_delete_from_cart');
add_action('wp_ajax_nopriv_woocommerce_ajax_delete_from_cart', 'woocommerce_ajax_delete_from_cart');
function woocommerce_ajax_delete_from_cart()
{
$cart_item_id = $_POST['product_id'];
$cart_item_key = $_POST['product_key'];
$cart_item_qty = get_item_qty($cart_item_key);
$cart_items = WC()->cart->cart_contents_count;
$new_cart_items = $cart_items - $cart_item_qty;
if ($cart_item_key) {
WC()->cart->remove_cart_item($cart_item_key);
define( 'WOOCOMMERCE_CHECKOUT', true );
define( 'WOOCOMMERCE_CART', true );
WC()->cart->calculate_totals();
WC()->cart->calculate_shipping();
$base_price = wc_price(WC()->cart->total - WC()->cart->tax_total);
$tax_total = 0;
foreach ( WC()->cart->get_tax_totals() as $code => $tax ) {
$tax_total = wp_kses_post($tax->formatted_amount);
}
ob_start();
wc_get_template_part( 'cart/mini-cart' );
$cart_html = ob_get_contents();
ob_end_clean();
ob_start();
wc_get_template_part( 'cart/cart-content' );
$main_cart_html = ob_get_contents();
ob_end_clean();
$has_null = get_free_product();
$data = array(
'cart_items' => $new_cart_items,
'cart_total' => WC()->cart->get_cart_subtotal(),
'base_price' => $base_price,
'tax_total' => $tax_total,
'quantity' => WC()->cart->cart_contents_count,
'cart' => $cart_html,
'main_cart' => $main_cart_html,
"null_product" => $has_null,
);
echo wp_send_json($data);
wp_die();
}
}
add_action('wp_ajax_woocommerce_ajax_change_qt_from_cart', 'woocommerce_ajax_change_qt_from_cart');
add_action('wp_ajax_nopriv_woocommerce_ajax_change_qt_from_cart', 'woocommerce_ajax_change_qt_from_cart');
function woocommerce_ajax_change_qt_from_cart()
{
$cart_item_id = $_POST['product_id'];
$cart_item_key = $_POST['product_key'];
$button_action = $_POST['button_action'];
$cart_item_qty = get_item_qty($cart_item_key);
$cart_item = WC()->cart->get_cart_item( $cart_item_key );
if($cart_item["variation"] || $cart_item["variation_id"]) {
$_product = wc_get_product($cart_item["variation_id"]);
}else{
$_product = wc_get_product($cart_item_id);
}
if ($_product->regular_price) {
$cart_item_price = $_product->regular_price;
}else{
$cart_item_price = $_product->price;
}
if($cart_item["variation"] && $cart_item["variation"]["print_type"])
$print_type = $cart_item["variation"]["print_type"];
else
$print_type = 0;
$cart_item_price = calculate_price_with_print($cart_item_price, $print_type, $cart_item_id, $cart_item["variation"]["print_europa_league"]);
if ($_product->is_on_sale()){
$cart_item_sale_price = $_product->sale_price;
$cart_item_sale_price = calculate_price_with_print($cart_item_sale_price, $print_type, $cart_item_id, $cart_item["variation"]["print_europa_league"]);
}
$cart_total = WC()->cart->cart_contents_total;
$cart_items = WC()->cart->cart_contents_count;
$print_type = $cart_item["variation"]["print_type"];
if ($button_action == "down") {
$new_qty = $cart_item_qty - 1;
$new_cart_items = $cart_items - 1;
$new_cart_total = $cart_total - $cart_item_price;
if($new_qty == 0){
$new_qty = 1;
}
} else {
$new_qty = $cart_item_qty + 1;
$new_cart_items = $cart_items + 1;
$new_cart_total = $cart_total + $cart_item_price;
}
if($_product->get_stock_quantity()){
if ($_product->get_stock_quantity() < $new_qty) {
$data = array(
'message' => __("Promjena nije moguća jer proizvod trenutno nije dostupan u količini koju ste odabrali.", 'dinamo_shop_plugin'),
'success' => false,
'new_qty' => $cart_item_qty,
);
echo wp_send_json($data);
wp_die();
return;
}
}
WC()->cart->set_quantity($cart_item_key, $new_qty);
ob_start();
define( 'WOOCOMMERCE_CHECKOUT', true );
define( 'WOOCOMMERCE_CART', true );
WC()->cart->calculate_totals();
WC()->cart->calculate_shipping();
$packages = WC()->shipping()->get_packages();
$shipping_price = "";
foreach ( $packages as $i => $package ) {
$available_methods = $package['rates'];
if ($available_methods) {
foreach ($available_methods as $method) {
$shipping_price = wc_price($method->cost);
}
}
}
$base_price = wc_price(WC()->cart->total - WC()->cart->tax_total);
$base_price_eur = secondary_price_output(WC()->cart->total - WC()->cart->tax_total);
$tax_total = 0;
$tax_total_eur = 0;
foreach ( WC()->cart->get_tax_totals() as $code => $tax ) {
$tax_total = wp_kses_post($tax->formatted_amount);
$tax_total_eur = secondary_price_output($tax->amount);
}
if ($_product->sale_price != ""){
$sale_price = wc_price($cart_item_sale_price * $new_qty);
}
ob_start();
wc_get_template_part( 'cart/mini-cart' );
$cart_html = ob_get_contents();
ob_end_clean();
$data = array(
'cart_items' => $new_cart_items,
'cart_total' => WC()->cart->get_total(),
'cart_total_eur' => secondary_price_output(WC()->cart->total),
'base_price' => $base_price,
'tax_total' => $tax_total,
'base_price_eur' => $base_price_eur,
'tax_total_eur' => $tax_total_eur,
'item_total' => wc_price($cart_item_price * $new_qty),
'item_sale_price'=> $sale_price,
'item_total_eur' => secondary_price_output($cart_item_price * $new_qty),
'item_sale_price_eur'=> secondary_price_output($cart_item_sale_price * $new_qty),
'quantity' => WC()->cart->cart_contents_count,
'new_qty' => $new_qty,
'success' => true,
'cart' => $cart_html
);
echo wp_send_json($data);
wp_die();
}
function coupon_check_via_ajax(){
$code = strtolower(trim($_POST['code']));
$coupon = new WC_Coupon($code);
$coupon_post = get_post($coupon->id);
if(!empty($coupon_post) && $coupon_post != null){
$message = 'Coupon not valid';
$status = 0;
if($coupon_post->post_status == 'publish'){
$message = 'Coupon validated';
$status = 1; }
} else {
$status = 0;
$message = 'Coupon not found!';
}
global $woocommerce; WC()->cart->remove_coupons();
$ret = WC()->cart->add_discount( $coupon );
$array = array('return' => $ret);
print_r($array);
//print json_encode( [ 'status' => $status, 'message' => $message, 'poststatus' =>
// $coupon_post->post_status,
// 'coupon_post' => $coupon_post ] );
exit();
}
add_action( 'wp_ajax_check_coupon_via_ajax', 'coupon_check_via_ajax' );
add_action( 'wp_ajax_nopriv_check_coupon_via_ajax', 'coupon_check_via_ajax' );
add_action('woocommerce_after_checkout_validation', 'not_approved_free_product', 10, 2);
function not_approved_free_product($data, $errors) {
$has_null = get_free_product();
if($has_null){
$errors->add('error', "Dodali ste proizvod od 0€.<br>
Ispričavamo se na grešci te Vas molimo da uklonite proizvod prije nastavka");
}
}