Plugin Directory

Changeset 3426727


Ignore:
Timestamp:
12/24/2025 09:53:36 AM (3 months ago)
Author:
formdev
Message:

fix add to cart product with login form

Location:
formdev/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • formdev/trunk/formdev.php

    r3426029 r3426727  
    55 * Plugin URI: https://www.form-dev.fr
    66 * Description: Synchroniser automatiquement les formations présentes dans votre CRM Formdev
    7  * Version: 1.3.1
     7 * Version: 1.3.2
    88 * Author: Formdev
    99 * Author URI: https://app.form-dev.fr
     
    1616// Définition de la version du plugin
    1717if (!defined('FORMEDEV_VERSION')) {
    18     define('FORMEDEV_VERSION', '1.3.1');
     18    define('FORMEDEV_VERSION', '1.3.2');
    1919}
    2020
     
    527527                    wp_set_auth_cookie($user->ID);
    528528                   
    529                     // Récupérer les formdev_ids de la session et les assigner à l'utilisateur connecté
    530                     $session_formdev_ids = WC()->session->get('formdev_ids_before_registration');
     529                    // Récupérer les idProduit et idAction depuis le formulaire (champs hidden) en priorité
     530                    $formdev_ids_from_form = array();
     531                    if (isset($_POST['formdev_idProduit']) && !empty($_POST['formdev_idProduit'])) {
     532                        $idProduit = absint($_POST['formdev_idProduit']);
     533                        $idAction = isset($_POST['formdev_idAction']) ? absint($_POST['formdev_idAction']) : 0;
     534                        $action_type = isset($_POST['formdev_action_type']) ? sanitize_text_field(wp_unslash($_POST['formdev_action_type'])) : 'quote';
     535                       
     536                        $formdev_ids_from_form[$idProduit] = array(
     537                            'idProduit' => $idProduit,
     538                            'idAction' => $idAction,
     539                            'action_type' => $action_type
     540                        );
     541                    }
     542                   
     543                    // Utiliser les données du formulaire en priorité, sinon la session
     544                    $session_formdev_ids = !empty($formdev_ids_from_form) ? $formdev_ids_from_form : WC()->session->get('formdev_ids_before_registration');
     545                   
    531546                    if (!empty($session_formdev_ids)) {
    532547                        update_user_meta($user->ID, 'formdev_ids', $session_formdev_ids);
     
    537552                    }
    538553                   
    539                     $redirect_url = formdev_build_redirect_url(array('devis-formdev' => 1));
     554                    // Construire l'URL avec les idProduit et idAction pour vérifier la restauration
     555                    $redirect_url = get_permalink(wc_get_page_id('cart')).'?devis-formdev=1';
     556                   
     557                    // Ajouter les idProduit et idAction dans l'URL si disponibles
     558                    if (!empty($session_formdev_ids) && is_array($session_formdev_ids)) {
     559                        foreach ($session_formdev_ids as $idProd => $data) {
     560                            $redirect_url = add_query_arg('idProduit', $idProd, $redirect_url);
     561                            if (isset($data['idAction'])) {
     562                                $redirect_url = add_query_arg('idAction', $data['idAction'], $redirect_url);
     563                            }
     564                            if (isset($data['action_type'])) {
     565                                $redirect_url = add_query_arg('action_type', $data['action_type'], $redirect_url);
     566                            }
     567                            break; // Prendre seulement le premier
     568                        }
     569                    }
     570                   
    540571                    header('location:'.$redirect_url);
    541572                    exit();
     
    624655                // Sauvegarder les formdev_ids dans les user_meta pour restauration ultérieure
    625656                update_user_meta($user_id, 'formdev_ids', $session_formdev_ids);
    626                 // Marquer qu'il faut restaurer le panier lors du prochain chargement
    627                 update_user_meta($user_id, 'formdev_restore_cart', '1');
     657               
     658                // Restaurer le panier immédiatement si l'utilisateur est connecté
     659                if (is_user_logged_in()) {
     660                    formdev_restore_cart_from_formdev_ids($user_id, $session_formdev_ids);
     661                } else {
     662                    // Marquer qu'il faut restaurer le panier lors du prochain chargement
     663                    update_user_meta($user_id, 'formdev_restore_cart', '1');
     664                }
    628665               
    629666                // Nettoyer la session
     
    685722                wp_set_auth_cookie($user->ID);
    686723               
    687                 // Récupérer les formdev_ids de la session et les assigner à l'utilisateur connecté
    688                 $session_formdev_ids = WC()->session->get('formdev_ids_before_registration');
     724                // Récupérer les idProduit et idAction depuis le formulaire (champs hidden) en priorité
     725                $formdev_ids_from_form = array();
     726                if (isset($_POST['formdev_idProduit']) && !empty($_POST['formdev_idProduit'])) {
     727                    $idProduit = absint($_POST['formdev_idProduit']);
     728                    $idAction = isset($_POST['formdev_idAction']) ? absint($_POST['formdev_idAction']) : 0;
     729                    $action_type = isset($_POST['formdev_action_type']) ? sanitize_text_field(wp_unslash($_POST['formdev_action_type'])) : 'quote';
     730                   
     731                    $formdev_ids_from_form[$idProduit] = array(
     732                        'idProduit' => $idProduit,
     733                        'idAction' => $idAction,
     734                        'action_type' => $action_type
     735                    );
     736                }
     737               
     738                // Utiliser les données du formulaire en priorité, sinon la session
     739                $session_formdev_ids = !empty($formdev_ids_from_form) ? $formdev_ids_from_form : WC()->session->get('formdev_ids_before_registration');
     740               
    689741                if (!empty($session_formdev_ids)) {
    690742                    update_user_meta($user->ID, 'formdev_ids', $session_formdev_ids);
     
    695747                }
    696748               
    697                 $redirect_url = formdev_build_redirect_url(array('devis-formdev' => 1));
     749                // Construire l'URL avec les idProduit et idAction pour vérifier la restauration
     750                $redirect_url = get_permalink(wc_get_page_id('cart')).'?devis-formdev=1';
     751               
     752                // Ajouter les idProduit et idAction dans l'URL si disponibles
     753                if (!empty($session_formdev_ids) && is_array($session_formdev_ids)) {
     754                    foreach ($session_formdev_ids as $idProd => $data) {
     755                        $redirect_url = add_query_arg('idProduit', $idProd, $redirect_url);
     756                        if (isset($data['idAction'])) {
     757                            $redirect_url = add_query_arg('idAction', $data['idAction'], $redirect_url);
     758                        }
     759                        if (isset($data['action_type'])) {
     760                            $redirect_url = add_query_arg('action_type', $data['action_type'], $redirect_url);
     761                        }
     762                        break; // Prendre seulement le premier
     763                    }
     764                }
     765               
    698766                header('location:'.$redirect_url);
    699767                exit();
     
    14051473                wp_set_auth_cookie($user->ID);
    14061474               
    1407                 // Récupérer les formdev_ids de la session et les assigner à l'utilisateur connecté
    1408                 $session_formdev_ids = WC()->session->get('formdev_ids_before_registration');
     1475                // Récupérer les idProduit et idAction depuis le formulaire (champs hidden) en priorité
     1476                $formdev_ids_from_form = array();
     1477                if (isset($_POST['formdev_idProduit']) && !empty($_POST['formdev_idProduit'])) {
     1478                    $idProduit = absint($_POST['formdev_idProduit']);
     1479                    $idAction = isset($_POST['formdev_idAction']) ? absint($_POST['formdev_idAction']) : 0;
     1480                    $action_type = isset($_POST['formdev_action_type']) ? sanitize_text_field(wp_unslash($_POST['formdev_action_type'])) : 'quote';
     1481                   
     1482                    $formdev_ids_from_form[$idProduit] = array(
     1483                        'idProduit' => $idProduit,
     1484                        'idAction' => $idAction,
     1485                        'action_type' => $action_type
     1486                    );
     1487                }
     1488               
     1489                // Utiliser les données du formulaire en priorité, sinon la session
     1490                $session_formdev_ids = !empty($formdev_ids_from_form) ? $formdev_ids_from_form : WC()->session->get('formdev_ids_before_registration');
     1491               
    14091492                if (!empty($session_formdev_ids)) {
    14101493                    update_user_meta($user->ID, 'formdev_ids', $session_formdev_ids);
     1494                    // Restaurer le panier après connexion
     1495                    formdev_restore_cart_from_formdev_ids($user->ID, $session_formdev_ids);
    14111496                    // Nettoyer la session
    14121497                    WC()->session->set('formdev_ids_before_registration', null);
    14131498                }
    14141499               
    1415                 $redirect_url = formdev_build_redirect_url(array('devis-formdev' => 1));
     1500                // Construire l'URL avec les idProduit et idAction pour vérifier la restauration
     1501                $redirect_url = get_permalink(wc_get_page_id('cart')).'?devis-formdev=1';
     1502               
     1503                // Ajouter les idProduit et idAction dans l'URL si disponibles
     1504                if (!empty($session_formdev_ids) && is_array($session_formdev_ids)) {
     1505                    foreach ($session_formdev_ids as $idProd => $data) {
     1506                        $redirect_url = add_query_arg('idProduit', $idProd, $redirect_url);
     1507                        if (isset($data['idAction'])) {
     1508                            $redirect_url = add_query_arg('idAction', $data['idAction'], $redirect_url);
     1509                        }
     1510                        if (isset($data['action_type'])) {
     1511                            $redirect_url = add_query_arg('action_type', $data['action_type'], $redirect_url);
     1512                        }
     1513                        break; // Prendre seulement le premier
     1514                    }
     1515                }
     1516               
    14161517                header('location:'.$redirect_url);
    14171518                exit();
     
    14661567        $fd->setUser($user_id, $sanitized_post);
    14671568
    1468         // Récupérer les formdev_ids de la session avant inscription et les assigner au nouvel utilisateur
    1469         $session_formdev_ids = WC()->session->get('formdev_ids_before_registration');
     1569        // Récupérer les idProduit et idAction depuis le formulaire (champs hidden) en priorité
     1570        $formdev_ids_from_form = array();
     1571        if (isset($_POST['formdev_idProduit']) && !empty($_POST['formdev_idProduit'])) {
     1572            $idProduit = absint($_POST['formdev_idProduit']);
     1573            $idAction = isset($_POST['formdev_idAction']) ? absint($_POST['formdev_idAction']) : 0;
     1574            $action_type = isset($_POST['formdev_action_type']) ? sanitize_text_field(wp_unslash($_POST['formdev_action_type'])) : 'quote';
     1575           
     1576            $formdev_ids_from_form[$idProduit] = array(
     1577                'idProduit' => $idProduit,
     1578                'idAction' => $idAction,
     1579                'action_type' => $action_type
     1580            );
     1581        }
     1582       
     1583        // Utiliser les données du formulaire en priorité, sinon la session
     1584        $session_formdev_ids = !empty($formdev_ids_from_form) ? $formdev_ids_from_form : WC()->session->get('formdev_ids_before_registration');
     1585       
    14701586        if (!empty($session_formdev_ids)) {
    14711587            update_user_meta($user_id, 'formdev_ids', $session_formdev_ids);
    1472             // Restaurer le panier après inscription
     1588            // Restaurer le panier après inscription/mise à jour
    14731589            formdev_restore_cart_from_formdev_ids($user_id, $session_formdev_ids);
    14741590            // Nettoyer la session
    14751591            WC()->session->set('formdev_ids_before_registration', null);
    14761592        }
    1477 
    1478         header('location:'.get_permalink(wc_get_page_id('cart')).'?devis-formdev=1&cart=1');
     1593       
     1594        // Construire l'URL avec les idProduit et idAction
     1595        $redirect_url = get_permalink(wc_get_page_id('cart')).'?devis-formdev=1&cart=1';
     1596       
     1597        // Ajouter les idProduit et idAction dans l'URL si disponibles
     1598        if (!empty($session_formdev_ids) && is_array($session_formdev_ids)) {
     1599            foreach ($session_formdev_ids as $idProd => $data) {
     1600                $redirect_url = add_query_arg('idProduit', $idProd, $redirect_url);
     1601                if (isset($data['idAction'])) {
     1602                    $redirect_url = add_query_arg('idAction', $data['idAction'], $redirect_url);
     1603                }
     1604                if (isset($data['action_type'])) {
     1605                    $redirect_url = add_query_arg('action_type', $data['action_type'], $redirect_url);
     1606                }
     1607                break; // Prendre seulement le premier
     1608            }
     1609        }
     1610
     1611        header('location:'.$redirect_url);
    14791612        exit();
    14801613    }
  • formdev/trunk/readme.txt

    r3426029 r3426727  
    55Tested up to: 6.8 
    66Requires PHP: 7.4 
    7 Stable tag: 1.3.1
     7Stable tag: 1.3.2
    88License: GPLv2 or later 
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html 
     
    6868
    6969== Changelog ==
     70= 1.3.2 =
     71* fix add to cart product with login form
     72
    7073= 1.3.1 =
    7174* fix add to cart product if error on subscribe form
  • formdev/trunk/templates/login.php

    r3426029 r3426727  
    8989            echo '<input type="hidden" name="login-formdev" value="1">';
    9090            wp_nonce_field('formdev_login_action', 'formdev_login_nonce');
     91           
     92            // Récupérer les idProduit et idAction depuis l'URL ou la session pour le formulaire de connexion
     93            // Si idProduit et idAction sont dans l'URL, les utiliser
     94            if ($idProduit > 0) {
     95                echo '<input type="hidden" name="formdev_idProduit" value="' . esc_attr($idProduit) . '">';
     96                echo '<input type="hidden" name="formdev_idAction" value="' . esc_attr($idAction ?: 0) . '">';
     97                if (!empty($action_type)) {
     98                    echo '<input type="hidden" name="formdev_action_type" value="' . esc_attr($action_type) . '">';
     99                }
     100            } elseif (function_exists('WC') && WC()->session) {
     101                // Sinon, récupérer depuis la session ou user_meta si connecté
     102                $formdev_ids = null;
     103                if (!is_user_logged_in()) {
     104                    $formdev_ids = WC()->session->get('formdev_ids_before_registration');
     105                } else {
     106                    $user_id = get_current_user_id();
     107                    $formdev_ids = get_user_meta($user_id, 'formdev_ids', true);
     108                }
     109               
     110                if (!empty($formdev_ids) && is_array($formdev_ids)) {
     111                    // Prendre le premier idProduit trouvé
     112                    foreach ($formdev_ids as $idProd => $data) {
     113                        echo '<input type="hidden" name="formdev_idProduit" value="' . esc_attr($idProd) . '">';
     114                        echo '<input type="hidden" name="formdev_idAction" value="' . esc_attr(isset($data['idAction']) ? $data['idAction'] : 0) . '">';
     115                        if (isset($data['action_type'])) {
     116                            echo '<input type="hidden" name="formdev_action_type" value="' . esc_attr($data['action_type']) . '">';
     117                        }
     118                        break; // Prendre seulement le premier
     119                    }
     120                }
     121            }
     122           
     123            // Préserver les nonces s'ils sont présents dans l'URL
     124            if (!empty($formdev_product_nonce)) {
     125                echo '<input type="hidden" name="formdev_product_nonce" value="' . esc_attr($formdev_product_nonce) . '">';
     126            }
     127            if (!empty($formdev_template_nonce)) {
     128                echo '<input type="hidden" name="formdev_template_nonce" value="' . esc_attr($formdev_template_nonce) . '">';
     129            }
    91130        } else {
    92131            wp_nonce_field('formdev_register_action', 'formdev_register_nonce');
    93132           
    94133            // Récupérer les idProduit et idAction depuis l'URL ou la session
    95             if (!is_user_logged_in()) {
    96                 // Si idProduit et idAction sont dans l'URL, les utiliser
    97                 if ($idProduit > 0) {
    98                     echo '<input type="hidden" name="formdev_idProduit" value="' . esc_attr($idProduit) . '">';
    99                     echo '<input type="hidden" name="formdev_idAction" value="' . esc_attr($idAction ?: 0) . '">';
    100                     if (!empty($action_type)) {
    101                         echo '<input type="hidden" name="formdev_action_type" value="' . esc_attr($action_type) . '">';
     134            // Si idProduit et idAction sont dans l'URL, les utiliser
     135            if ($idProduit > 0) {
     136                echo '<input type="hidden" name="formdev_idProduit" value="' . esc_attr($idProduit) . '">';
     137                echo '<input type="hidden" name="formdev_idAction" value="' . esc_attr($idAction ?: 0) . '">';
     138                if (!empty($action_type)) {
     139                    echo '<input type="hidden" name="formdev_action_type" value="' . esc_attr($action_type) . '">';
     140                }
     141            } elseif (function_exists('WC') && WC()->session) {
     142                // Sinon, récupérer depuis la session ou user_meta si connecté
     143                $formdev_ids = null;
     144                if (!is_user_logged_in()) {
     145                    $formdev_ids = WC()->session->get('formdev_ids_before_registration');
     146                } else {
     147                    $user_id = get_current_user_id();
     148                    $formdev_ids = get_user_meta($user_id, 'formdev_ids', true);
     149                }
     150               
     151                if (!empty($formdev_ids) && is_array($formdev_ids)) {
     152                    // Prendre le premier idProduit trouvé
     153                    foreach ($formdev_ids as $idProd => $data) {
     154                        echo '<input type="hidden" name="formdev_idProduit" value="' . esc_attr($idProd) . '">';
     155                        echo '<input type="hidden" name="formdev_idAction" value="' . esc_attr(isset($data['idAction']) ? $data['idAction'] : 0) . '">';
     156                        if (isset($data['action_type'])) {
     157                            echo '<input type="hidden" name="formdev_action_type" value="' . esc_attr($data['action_type']) . '">';
     158                        }
     159                        break; // Prendre seulement le premier
    102160                    }
    103                 } elseif (function_exists('WC') && WC()->session) {
    104                     // Sinon, récupérer depuis la session
    105                     $formdev_ids = WC()->session->get('formdev_ids_before_registration');
    106                     if (!empty($formdev_ids) && is_array($formdev_ids)) {
    107                         // Prendre le premier idProduit trouvé dans la session
    108                         foreach ($formdev_ids as $idProd => $data) {
    109                             echo '<input type="hidden" name="formdev_idProduit" value="' . esc_attr($idProd) . '">';
    110                             echo '<input type="hidden" name="formdev_idAction" value="' . esc_attr(isset($data['idAction']) ? $data['idAction'] : 0) . '">';
    111                             if (isset($data['action_type'])) {
    112                                 echo '<input type="hidden" name="formdev_action_type" value="' . esc_attr($data['action_type']) . '">';
    113                             }
    114                             break; // Prendre seulement le premier
    115                         }
    116                     }
    117                 }
    118                
    119                 // Préserver les nonces s'ils sont présents dans l'URL
    120                 if (!empty($formdev_product_nonce)) {
    121                     echo '<input type="hidden" name="formdev_product_nonce" value="' . esc_attr($formdev_product_nonce) . '">';
    122                 }
    123                 if (!empty($formdev_template_nonce)) {
    124                     echo '<input type="hidden" name="formdev_template_nonce" value="' . esc_attr($formdev_template_nonce) . '">';
    125                 }
     161                }
     162            }
     163           
     164            // Préserver les nonces s'ils sont présents dans l'URL
     165            if (!empty($formdev_product_nonce)) {
     166                echo '<input type="hidden" name="formdev_product_nonce" value="' . esc_attr($formdev_product_nonce) . '">';
     167            }
     168            if (!empty($formdev_template_nonce)) {
     169                echo '<input type="hidden" name="formdev_template_nonce" value="' . esc_attr($formdev_template_nonce) . '">';
    126170            }
    127171        }
Note: See TracChangeset for help on using the changeset viewer.