Plugin Directory

Changeset 3780103


Ignore:
Timestamp:
11/02/2026 03:11:43 PM (13 hours ago)
Author:
m0r3z
Message:

Update to version 0.12.2 from GitHub

Location:
mrz-gift-lists-exp
Files:
24 edited
1 copied

Legend:

Unmodified
Added
Removed
  • mrz-gift-lists-exp/tags/0.12.2/includes/admin/class-list-table.php

    r3780021 r3780103  
    165165                LIMIT %d OFFSET %d";
    166166
    167         return $wpdb->get_results( $wpdb->prepare( $sql, $params ) );
     167        // $orderby, $order et le nom de table sont en liste blanche ou constants (voir plus haut) ; les valeurs passent par prepare().
     168        return $wpdb->get_results( $wpdb->prepare( $sql, $params ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, PluginCheck.Security.DirectDB.UnescapedDBParameter, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
    168169    }
    169170
  • mrz-gift-lists-exp/tags/0.12.2/includes/admin/pages/class-settings-page.php

    r3777163 r3780103  
    145145        wp_dropdown_pages( [
    146146            'name'              => 'mrzgle_page_id',
    147             'selected'          => $page_id,
    148             'show_option_none'  => __( '-- Select --', 'mrz-gift-lists-exp' ),
     147            'selected'          => absint( $page_id ),
     148            'show_option_none'  => esc_html__( '-- Select --', 'mrz-gift-lists-exp' ),
    149149            'option_none_value' => 0,
    150150        ] );
    … …  
    159159        wp_dropdown_pages( [
    160160            'name'              => 'mrzgle_shop_page_id',
    161             'selected'          => $page_id,
    162             'show_option_none'  => __( '-- Select --', 'mrz-gift-lists-exp' ),
     161            'selected'          => absint( $page_id ),
     162            'show_option_none'  => esc_html__( '-- Select --', 'mrz-gift-lists-exp' ),
    163163            'option_none_value' => 0,
    164164        ] );
  • mrz-gift-lists-exp/tags/0.12.2/includes/ajax/class-handler.php

    r3777163 r3780103  
    337337            'mrzgle_item_id'    => $item_id,
    338338            'mrzgle_list_title' => $this->list_repo->find( $list_id )->title ?? '',
    339             'unique_key'      => md5( microtime() . rand() ),
     339            'unique_key'      => md5( microtime() . wp_rand() ),
    340340        ] );
    341341
  • mrz-gift-lists-exp/tags/0.12.2/includes/frontend/shortcodes/class-gift-lists-shortcode.php

    r3780021 r3780103  
    179179
    180180            <div class="mrz-gle-row-actions">
    181                 <a class="mrz-gle-btn mrz-gle-btn-small mrz-gle-btn-icon" href="<?php echo esc_url( $list_url ); ?>" title="<?php esc_attr_e( 'View', 'mrz-gift-lists-exp' ); ?>"><?php echo $this->icon( 'eye', __( 'View', 'mrz-gift-lists-exp' ) ); ?></a>
    182                 <a class="mrz-gle-btn mrz-gle-btn-small mrz-gle-btn-icon" href="<?php echo esc_url( add_query_arg( [ 'action' => 'edit', 'list_id' => $list->id ], \Mrzgle\Plugin::instance()->get_lists_page_url() ) ); ?>" title="<?php esc_attr_e( 'Edit', 'mrz-gift-lists-exp' ); ?>"><?php echo $this->icon( 'edit', __( 'Edit', 'mrz-gift-lists-exp' ) ); ?></a>
     181                <a class="mrz-gle-btn mrz-gle-btn-small mrz-gle-btn-icon" href="<?php echo esc_url( $list_url ); ?>" title="<?php esc_attr_e( 'View', 'mrz-gift-lists-exp' ); ?>"><?php $this->render_icon( 'eye', __( 'View', 'mrz-gift-lists-exp' ) ); ?></a>
     182                <a class="mrz-gle-btn mrz-gle-btn-small mrz-gle-btn-icon" href="<?php echo esc_url( add_query_arg( [ 'action' => 'edit', 'list_id' => $list->id ], \Mrzgle\Plugin::instance()->get_lists_page_url() ) ); ?>" title="<?php esc_attr_e( 'Edit', 'mrz-gift-lists-exp' ); ?>"><?php $this->render_icon( 'edit', __( 'Edit', 'mrz-gift-lists-exp' ) ); ?></a>
    183183                <form method="post" class="mrz-gle-list-manage">
    184184                    <?php wp_nonce_field( 'mrzgle_owner_list_action_' . $list->id, 'mrzgle_list_nonce' ); ?>
    … …  
    186186                    <input type="hidden" name="mrzgle_return" value="my-lists">
    187187                    <?php if ( $is_active ) : ?>
    188                         <button type="submit" name="mrzgle_list_action" value="deactivate" class="mrz-gle-btn mrz-gle-btn-small mrz-gle-btn-icon" title="<?php esc_attr_e( 'Deactivate', 'mrz-gift-lists-exp' ); ?>"><?php echo $this->icon( 'pause-circle', __( 'Deactivate', 'mrz-gift-lists-exp' ) ); ?></button>
     188                        <button type="submit" name="mrzgle_list_action" value="deactivate" class="mrz-gle-btn mrz-gle-btn-small mrz-gle-btn-icon" title="<?php esc_attr_e( 'Deactivate', 'mrz-gift-lists-exp' ); ?>"><?php $this->render_icon( 'pause-circle', __( 'Deactivate', 'mrz-gift-lists-exp' ) ); ?></button>
    189189                    <?php else : ?>
    190                         <button type="submit" name="mrzgle_list_action" value="activate" class="mrz-gle-btn mrz-gle-btn-small mrz-gle-btn-icon" title="<?php esc_attr_e( 'Activate', 'mrz-gift-lists-exp' ); ?>"><?php echo $this->icon( 'play-circle', __( 'Activate', 'mrz-gift-lists-exp' ) ); ?></button>
     190                        <button type="submit" name="mrzgle_list_action" value="activate" class="mrz-gle-btn mrz-gle-btn-small mrz-gle-btn-icon" title="<?php esc_attr_e( 'Activate', 'mrz-gift-lists-exp' ); ?>"><?php $this->render_icon( 'play-circle', __( 'Activate', 'mrz-gift-lists-exp' ) ); ?></button>
    191191                    <?php endif; ?>
    192192                    <button type="submit" name="mrzgle_list_action" value="delete" class="mrz-gle-btn mrz-gle-btn-small mrz-gle-btn-icon mrz-gle-btn-danger mrz-gle-confirm" title="<?php esc_attr_e( 'Delete', 'mrz-gift-lists-exp' ); ?>"
    193                             data-confirm="<?php esc_attr_e( 'Permanently delete this list?', 'mrz-gift-lists-exp' ); ?>"><?php echo $this->icon( 'trash', __( 'Delete', 'mrz-gift-lists-exp' ) ); ?></button>
     193                            data-confirm="<?php esc_attr_e( 'Permanently delete this list?', 'mrz-gift-lists-exp' ); ?>"><?php $this->render_icon( 'trash', __( 'Delete', 'mrz-gift-lists-exp' ) ); ?></button>
    194194                </form>
    195195            </div>
    … …  
    219219                <?php if ( Frontend::can_create_list() ) : ?>
    220220                    <a href="<?php echo esc_url( add_query_arg( 'action', 'create' ) ); ?>" class="mrz-gle-btn mrz-gle-btn-primary">
    221                         <?php echo $this->icon( 'add', '' ); ?> <?php esc_html_e( 'New list', 'mrz-gift-lists-exp' ); ?>
     221                        <?php $this->render_icon( 'add', '' ); ?> <?php esc_html_e( 'New list', 'mrz-gift-lists-exp' ); ?>
    222222                    </a>
    223223                <?php endif; ?>
    … …  
    628628                <div class="mrz-gle-owner-actions">
    629629                    <a href="<?php echo esc_url( $this->get_shop_url() ); ?>" class="mrz-gle-btn mrz-gle-btn-primary">
    630                         <?php echo $this->icon( 'add', '' ); ?> <?php esc_html_e( 'Add product', 'mrz-gift-lists-exp' ); ?>
     630                        <?php $this->render_icon( 'add', '' ); ?> <?php esc_html_e( 'Add product', 'mrz-gift-lists-exp' ); ?>
    631631                    </a>
    632632
    633633                    <a href="<?php echo esc_url( add_query_arg( [ 'action' => 'edit', 'list_id' => $list->id ], \Mrzgle\Plugin::instance()->get_lists_page_url() ) ); ?>" class="mrz-gle-btn">
    634                         <?php echo $this->icon( 'edit', '' ); ?> <?php esc_html_e( 'Edit', 'mrz-gift-lists-exp' ); ?>
     634                        <?php $this->render_icon( 'edit', '' ); ?> <?php esc_html_e( 'Edit', 'mrz-gift-lists-exp' ); ?>
    635635                    </a>
    636636
    … …  
    640640                        <input type="hidden" name="mrzgle_return" value="list">
    641641                        <?php if ( 'active' === $list->status ) : ?>
    642                             <button type="submit" name="mrzgle_list_action" value="deactivate" class="mrz-gle-btn"><?php echo $this->icon( 'pause-circle', '' ); ?> <?php esc_html_e( 'Deactivate', 'mrz-gift-lists-exp' ); ?></button>
     642                            <button type="submit" name="mrzgle_list_action" value="deactivate" class="mrz-gle-btn"><?php $this->render_icon( 'pause-circle', '' ); ?> <?php esc_html_e( 'Deactivate', 'mrz-gift-lists-exp' ); ?></button>
    643643                        <?php else : ?>
    644                             <button type="submit" name="mrzgle_list_action" value="activate" class="mrz-gle-btn"><?php echo $this->icon( 'play-circle', '' ); ?> <?php esc_html_e( 'Activate', 'mrz-gift-lists-exp' ); ?></button>
     644                            <button type="submit" name="mrzgle_list_action" value="activate" class="mrz-gle-btn"><?php $this->render_icon( 'play-circle', '' ); ?> <?php esc_html_e( 'Activate', 'mrz-gift-lists-exp' ); ?></button>
    645645                        <?php endif; ?>
    646646                        <button type="submit" name="mrzgle_list_action" value="delete" class="mrz-gle-btn mrz-gle-btn-danger mrz-gle-confirm"
    647                                 data-confirm="<?php esc_attr_e( 'Permanently delete this list?', 'mrz-gift-lists-exp' ); ?>"><?php echo $this->icon( 'trash', '' ); ?> <?php esc_html_e( 'Delete', 'mrz-gift-lists-exp' ); ?></button>
     647                                data-confirm="<?php esc_attr_e( 'Permanently delete this list?', 'mrz-gift-lists-exp' ); ?>"><?php $this->render_icon( 'trash', '' ); ?> <?php esc_html_e( 'Delete', 'mrz-gift-lists-exp' ); ?></button>
    648648                    </form>
    649649                </div>
    … …  
    688688                            <p class="mrz-gle-empty-actions">
    689689                                <a href="<?php echo esc_url( $this->get_shop_url() ); ?>" class="mrz-gle-btn mrz-gle-btn-primary">
    690                                     <?php echo $this->icon( 'add', '' ); ?> <?php esc_html_e( 'Add product', 'mrz-gift-lists-exp' ); ?>
     690                                    <?php $this->render_icon( 'add', '' ); ?> <?php esc_html_e( 'Add product', 'mrz-gift-lists-exp' ); ?>
    691691                                </a>
    692692                            </p>
    … …  
    743743
    744744                <a class="mrz-gle-btn mrz-gle-btn-small mrz-gle-btn-icon" href="<?php echo esc_url( $item->product_url ); ?>" title="<?php esc_attr_e( 'View product', 'mrz-gift-lists-exp' ); ?>">
    745                     <?php echo $this->icon( 'eye', __( 'View product', 'mrz-gift-lists-exp' ) ); ?>
     745                    <?php $this->render_icon( 'eye', __( 'View product', 'mrz-gift-lists-exp' ) ); ?>
    746746                </a>
    747747
    … …  
    751751                            data-item-id="<?php echo esc_attr( $item->id ); ?>"
    752752                            title="<?php esc_attr_e( 'Favorite (show at the top)', 'mrz-gift-lists-exp' ); ?>">
    753                         <?php echo $this->icon( $item->priority ? 'star-active' : 'star', __( 'Favorite', 'mrz-gift-lists-exp' ) ); ?>
     753                        <?php $this->render_icon( $item->priority ? 'star-active' : 'star', __( 'Favorite', 'mrz-gift-lists-exp' ) ); ?>
    754754                    </button>
    755755                    <button type="button"
    … …  
    757757                            data-item-id="<?php echo esc_attr( $item->id ); ?>"
    758758                            title="<?php esc_attr_e( 'Remove from list', 'mrz-gift-lists-exp' ); ?>">
    759                         <?php echo $this->icon( 'trash', __( 'Remove from list', 'mrz-gift-lists-exp' ) ); ?>
     759                        <?php $this->render_icon( 'trash', __( 'Remove from list', 'mrz-gift-lists-exp' ) ); ?>
    760760                    </button>
    761761                <?php endif; ?>
    … …  
    783783
    784784    /**
    785      * Retourne la balise <img> d'une icône du plugin (assets/img/<name>.svg).
     785     * Affiche la balise <img> d'une icône du plugin (assets/img/<name>.svg).
    786786     *
    787787     * @param string $name  Nom du fichier, sans extension.
    788788     * @param string $label Texte alternatif (accessibilité).
    789      * @return string
    790      */
    791     private function icon( string $name, string $label ): string {
    792         return sprintf(
     789     */
     790    private function render_icon( string $name, string $label ): void {
     791        printf(
    793792            '<img class="mrz-gle-icon" src="%s" alt="%s">',
    794793            esc_url( MRZGLE_PLUGIN_URL . 'assets/img/' . $name . '.svg' ),
    … …  
    812811                <input type="text" class="mrz-gle-share-url" value="<?php echo esc_url( $list_url ); ?>" readonly>
    813812                <button type="button" class="mrz-gle-btn mrz-gle-share-copy" data-url="<?php echo esc_attr( $list_url ); ?>">
    814                     <?php echo $this->icon( 'copy-alt', '' ); ?> <?php esc_html_e( 'Copy link', 'mrz-gift-lists-exp' ); ?>
     813                    <?php $this->render_icon( 'copy-alt', '' ); ?> <?php esc_html_e( 'Copy link', 'mrz-gift-lists-exp' ); ?>
    815814                </button>
    816815            </div>
  • mrz-gift-lists-exp/tags/0.12.2/includes/integrations/class-woo-commerce.php

    r3777163 r3780103  
    151151
    152152                // Clé unique pour permettre le même produit plusieurs fois
    153                 $cart_item_data['unique_key'] = md5( microtime() . rand() );
     153                $cart_item_data['unique_key'] = md5( microtime() . wp_rand() );
    154154            }
    155155        }
  • mrz-gift-lists-exp/tags/0.12.2/languages/mrz-gift-lists-exp-fr_FR.l10n.php

    r3780021 r3780103  
    11<?php
    2 return ['domain'=>'mrz-gift-lists-exp','plural-forms'=>'nplurals=2; plural=(n > 1);','language'=>'fr_FR','project-id-version'=>'MRZ Gift Lists 0.12.1','pot-creation-date'=>'2026-10-31T16:37:09+00:00','po-revision-date'=>'2026-10-31 16:37+0000','x-generator'=>'WP-CLI 2.12.0','messages'=>['MRZ Gift Lists Exp'=>'MRZ Gift Lists Exp','https://github.com/m0r3z/mrz-gift-lists-exp'=>'https://github.com/m0r3z/mrz-gift-lists-exp','Gift lists for WooCommerce: your customers build a list of products to receive, share the link, and their friends and family buy them.'=>'Listes de cadeaux pour WooCommerce : vos clients créent une liste de produits, partagent le lien, et leurs proches achètent.','Morez.co'=>'Morez.co','https://morez.co'=>'https://morez.co','MRZ Gift Lists: no lists page is set. Create a page containing the [mrzgle_lists] shortcode, then select it in the settings.'=>'MRZ Gift Lists : aucune page des listes n\'est définie. Créez une page contenant le shortcode [mrzgle_lists], puis sélectionnez-la dans les réglages.','Open settings'=>'Ouvrir les réglages','MRZ Gift Lists'=>'MRZ Gift Lists','All lists'=>'Toutes les listes','Settings'=>'Réglages','Title'=>'Titre','Creator'=>'Créateur','Products'=>'Produits','Status'=>'Statut','Date'=>'Date','View details'=>'Voir détails','View on site'=>'Voir sur le site','Are you sure you want to delete this list?'=>'Êtes-vous sûr de vouloir supprimer cette liste ?','Delete'=>'Supprimer','Deleted user'=>'Utilisateur supprimé','purchased'=>'achetés','Active'=>'Active','Archived'=>'Archivée','Completed'=>'Terminée','No lists found.'=>'Aucune liste trouvée.','All statuses'=>'Tous les statuts','Filter'=>'Filtrer','Action not allowed.'=>'Action non autorisée.','Gift lists'=>'Listes de cadeaux','Search'=>'Rechercher','List not found.'=>'Liste non trouvée.','Back'=>'Retour','Details'=>'Informations','Date created'=>'Date de création','Event date'=>'Date de l\'événement','Access key'=>'Clé d\'accès','View'=>'Voir','Description'=>'Description','No products in this list.'=>'Aucun produit dans cette liste.','Product'=>'Produit','Price'=>'Prix','Purchased by'=>'Acheté par','Favorite'=>'Favori','Available'=>'Disponible','Reserved'=>'Réservé','Purchased'=>'Acheté','Statistics'=>'Statistiques','products in total'=>'produits au total','available'=>'disponibles','Actions'=>'Actions','View list'=>'Voir la liste','Archive'=>'Archiver','Reactivate'=>'Réactiver','List deleted successfully.'=>'Liste supprimée avec succès.','List archived successfully.'=>'Liste archivée avec succès.','List reactivated successfully.'=>'Liste réactivée avec succès.','General settings'=>'Réglages généraux','Lists page'=>'Page des listes','Shop page'=>'Page boutique','Max lists per user'=>'Listes max par utilisateur','Emails'=>'Emails','Admin email'=>'Email administrateur','Notify the list creator'=>'Notifier le créateur','You do not have sufficient permissions.'=>'Vous n\'avez pas les droits nécessaires.','MRZ Gift Lists settings'=>'Réglages MRZ Gift Lists','Configure the general plugin options.'=>'Configurez les options générales du plugin.','Configure email notifications.'=>'Configurez les notifications par email.','-- Select --'=>'-- Sélectionner --','Page containing the [mrzgle_lists] shortcode.'=>'Page contenant le shortcode [mrzgle_lists].','Page that a list’s “Add product” button links to. Defaults to the WooCommerce shop page.'=>'Page vers laquelle renvoie le bouton « Ajouter un produit » d\'une liste. Par défaut, la page boutique WooCommerce.','Maximum number of active lists per user (0 = unlimited).'=>'Nombre maximum de listes actives par utilisateur (0 = illimité).','Email address that receives notifications (leave empty to disable).'=>'Email pour recevoir les notifications (laisser vide pour désactiver).','Send an email to the list creator when a product is purchased'=>'Envoyer un email au créateur de la liste quand un produit est acheté','Security check failed. Please refresh the page.'=>'Erreur de sécurité. Veuillez rafraîchir la page.','You must be logged in.'=>'Vous devez être connecté.','You are not allowed to edit this list.'=>'Vous n\'êtes pas autorisé à modifier cette liste.','Missing data.'=>'Données manquantes.','Product not found.'=>'Produit introuvable.','This product is already in the list.'=>'Ce produit est déjà dans la liste.','Product added to the list.'=>'Produit ajouté à la liste.','Product removed from the list.'=>'Produit retiré de la liste.','Error while deleting.'=>'Erreur lors de la suppression.','Marked as priority.'=>'Marqué comme prioritaire.','Priority removed.'=>'Priorité retirée.','Nothing to update.'=>'Aucune donnée à mettre à jour.','List updated.'=>'Liste mise à jour.','Error while updating.'=>'Erreur lors de la mise à jour.','List deleted.'=>'Liste supprimée.','Product not found in the list.'=>'Produit introuvable dans la liste.','This product has already been gifted.'=>'Ce produit a déjà été offert.','Product added to the cart.'=>'Produit ajouté au panier.','Error while adding to the cart.'=>'Erreur lors de l\'ajout au panier.','Are you sure you want to delete this item?'=>'Êtes-vous sûr de vouloir supprimer cet élément ?','Adding...'=>'Ajout en cours...','Added!'=>'Ajouté !','An error occurred'=>'Une erreur est survenue','Product added to the list'=>'Produit ajouté à la liste','Product removed from the list'=>'Produit retiré de la liste','Product added to the cart'=>'Produit ajouté au panier','Link copied!'=>'Lien copié !','Please select a list.'=>'Veuillez sélectionner une liste.','Are you sure you want to delete this?'=>'Êtes-vous sûr de vouloir supprimer ?','Saved'=>'Enregistré','Error'=>'Erreur','[%s] New gift list created'=>'[%s] Nouvelle liste de cadeaux créée','🎁 A gift has been purchased from your list "%s"'=>'🎁 Un cadeau a été offert depuis votre liste "%s"','[%s] Purchase from a gift list'=>'[%s] Achat depuis une liste de cadeaux','Unknown'=>'Inconnu','
     2return ['domain'=>'mrz-gift-lists-exp','plural-forms'=>'nplurals=2; plural=(n > 1);','language'=>'fr_FR','project-id-version'=>'MRZ Gift Lists 0.12.2','pot-creation-date'=>'2026-10-31T16:37:09+00:00','po-revision-date'=>'2026-10-31 16:37+0000','x-generator'=>'WP-CLI 2.12.0','messages'=>['MRZ Gift Lists Exp'=>'MRZ Gift Lists Exp','https://github.com/m0r3z/mrz-gift-lists-exp'=>'https://github.com/m0r3z/mrz-gift-lists-exp','Gift lists for WooCommerce: your customers build a list of products to receive, share the link, and their friends and family buy them.'=>'Listes de cadeaux pour WooCommerce : vos clients créent une liste de produits, partagent le lien, et leurs proches achètent.','Morez.co'=>'Morez.co','https://morez.co'=>'https://morez.co','MRZ Gift Lists: no lists page is set. Create a page containing the [mrzgle_lists] shortcode, then select it in the settings.'=>'MRZ Gift Lists : aucune page des listes n\'est définie. Créez une page contenant le shortcode [mrzgle_lists], puis sélectionnez-la dans les réglages.','Open settings'=>'Ouvrir les réglages','MRZ Gift Lists'=>'MRZ Gift Lists','All lists'=>'Toutes les listes','Settings'=>'Réglages','Title'=>'Titre','Creator'=>'Créateur','Products'=>'Produits','Status'=>'Statut','Date'=>'Date','View details'=>'Voir détails','View on site'=>'Voir sur le site','Are you sure you want to delete this list?'=>'Êtes-vous sûr de vouloir supprimer cette liste ?','Delete'=>'Supprimer','Deleted user'=>'Utilisateur supprimé','purchased'=>'achetés','Active'=>'Active','Archived'=>'Archivée','Completed'=>'Terminée','No lists found.'=>'Aucune liste trouvée.','All statuses'=>'Tous les statuts','Filter'=>'Filtrer','Action not allowed.'=>'Action non autorisée.','Gift lists'=>'Listes de cadeaux','Search'=>'Rechercher','List not found.'=>'Liste non trouvée.','Back'=>'Retour','Details'=>'Informations','Date created'=>'Date de création','Event date'=>'Date de l\'événement','Access key'=>'Clé d\'accès','View'=>'Voir','Description'=>'Description','No products in this list.'=>'Aucun produit dans cette liste.','Product'=>'Produit','Price'=>'Prix','Purchased by'=>'Acheté par','Favorite'=>'Favori','Available'=>'Disponible','Reserved'=>'Réservé','Purchased'=>'Acheté','Statistics'=>'Statistiques','products in total'=>'produits au total','available'=>'disponibles','Actions'=>'Actions','View list'=>'Voir la liste','Archive'=>'Archiver','Reactivate'=>'Réactiver','List deleted successfully.'=>'Liste supprimée avec succès.','List archived successfully.'=>'Liste archivée avec succès.','List reactivated successfully.'=>'Liste réactivée avec succès.','General settings'=>'Réglages généraux','Lists page'=>'Page des listes','Shop page'=>'Page boutique','Max lists per user'=>'Listes max par utilisateur','Emails'=>'Emails','Admin email'=>'Email administrateur','Notify the list creator'=>'Notifier le créateur','You do not have sufficient permissions.'=>'Vous n\'avez pas les droits nécessaires.','MRZ Gift Lists settings'=>'Réglages MRZ Gift Lists','Configure the general plugin options.'=>'Configurez les options générales du plugin.','Configure email notifications.'=>'Configurez les notifications par email.','-- Select --'=>'-- Sélectionner --','Page containing the [mrzgle_lists] shortcode.'=>'Page contenant le shortcode [mrzgle_lists].','Page that a list’s “Add product” button links to. Defaults to the WooCommerce shop page.'=>'Page vers laquelle renvoie le bouton « Ajouter un produit » d\'une liste. Par défaut, la page boutique WooCommerce.','Maximum number of active lists per user (0 = unlimited).'=>'Nombre maximum de listes actives par utilisateur (0 = illimité).','Email address that receives notifications (leave empty to disable).'=>'Email pour recevoir les notifications (laisser vide pour désactiver).','Send an email to the list creator when a product is purchased'=>'Envoyer un email au créateur de la liste quand un produit est acheté','Security check failed. Please refresh the page.'=>'Erreur de sécurité. Veuillez rafraîchir la page.','You must be logged in.'=>'Vous devez être connecté.','You are not allowed to edit this list.'=>'Vous n\'êtes pas autorisé à modifier cette liste.','Missing data.'=>'Données manquantes.','Product not found.'=>'Produit introuvable.','This product is already in the list.'=>'Ce produit est déjà dans la liste.','Product added to the list.'=>'Produit ajouté à la liste.','Product removed from the list.'=>'Produit retiré de la liste.','Error while deleting.'=>'Erreur lors de la suppression.','Marked as priority.'=>'Marqué comme prioritaire.','Priority removed.'=>'Priorité retirée.','Nothing to update.'=>'Aucune donnée à mettre à jour.','List updated.'=>'Liste mise à jour.','Error while updating.'=>'Erreur lors de la mise à jour.','List deleted.'=>'Liste supprimée.','Product not found in the list.'=>'Produit introuvable dans la liste.','This product has already been gifted.'=>'Ce produit a déjà été offert.','Product added to the cart.'=>'Produit ajouté au panier.','Error while adding to the cart.'=>'Erreur lors de l\'ajout au panier.','Are you sure you want to delete this item?'=>'Êtes-vous sûr de vouloir supprimer cet élément ?','Adding...'=>'Ajout en cours...','Added!'=>'Ajouté !','An error occurred'=>'Une erreur est survenue','Product added to the list'=>'Produit ajouté à la liste','Product removed from the list'=>'Produit retiré de la liste','Product added to the cart'=>'Produit ajouté au panier','Link copied!'=>'Lien copié !','Please select a list.'=>'Veuillez sélectionner une liste.','Are you sure you want to delete this?'=>'Êtes-vous sûr de vouloir supprimer ?','Saved'=>'Enregistré','Error'=>'Erreur','[%s] New gift list created'=>'[%s] Nouvelle liste de cadeaux créée','🎁 A gift has been purchased from your list "%s"'=>'🎁 Un cadeau a été offert depuis votre liste "%s"','[%s] Purchase from a gift list'=>'[%s] Achat depuis une liste de cadeaux','Unknown'=>'Inconnu','
    33
    44Message: %s'=>'
  • mrz-gift-lists-exp/tags/0.12.2/languages/mrz-gift-lists-exp-fr_FR.po

    r3780021 r3780103  
    11msgid ""
    22msgstr ""
    3 "Project-Id-Version: MRZ Gift Lists 0.12.1\n"
     3"Project-Id-Version: MRZ Gift Lists 0.12.2\n"
    44"Report-Msgid-Bugs-To: https://github.com/m0r3z/mrz-gift-lists-exp\n"
    55"Last-Translator: Morez.co <hello@morez.co>\n"
  • mrz-gift-lists-exp/tags/0.12.2/languages/mrz-gift-lists-exp.pot

    r3780021 r3780103  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: MRZ Gift Lists Exp 0.12.1\n"
     5"Project-Id-Version: MRZ Gift Lists Exp 0.12.2\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/mrz-gift-lists-exp\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
  • mrz-gift-lists-exp/tags/0.12.2/mrz-gift-lists-exp.php

    r3780021 r3780103  
    44 * Plugin URI:        https://github.com/m0r3z/mrz-gift-lists-exp
    55 * Description:       Gift lists for WooCommerce: your customers build a list of products to receive, share the link, and their friends and family buy them.
    6  * Version:           0.12.1
     6 * Version:           0.12.2
    77 * Requires at least: 6.0
    88 * Requires PHP:      8.0
    … …  
    3030
    3131// Constantes du plugin
    32 define( 'MRZGLE_VERSION', '0.12.1' );
     32define( 'MRZGLE_VERSION', '0.12.2' );
    3333define( 'MRZGLE_PLUGIN_FILE', __FILE__ );
    3434define( 'MRZGLE_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
  • mrz-gift-lists-exp/tags/0.12.2/readme.txt

    r3780021 r3780103  
    55Tested up to: 7.1
    66Requires PHP: 8.0
    7 Stable tag: 0.12.1
     7Stable tag: 0.12.2
    88License: GPLv3 or later
    99License URI: https://www.gnu.org/licenses/gpl-3.0.html
    … …  
    6060
    6161== Changelog ==
     62
     63= 0.12.2 =
     64* Security: escaped the page dropdowns on the settings screen.
     65* Use wp_rand() instead of rand() when adding a gift to the cart.
     66* Code cleanup for Plugin Check: icons are printed with escaped output, the admin list query and the uninstall routine are documented, and uninstall variables are prefixed.
    6267
    6368= 0.12.1 =
  • mrz-gift-lists-exp/tags/0.12.2/uninstall.php

    r3679573 r3780103  
    1717
    1818// Supprime les tables
    19 $tables = [
     19$mrzgle_tables = [
    2020    $wpdb->prefix . 'mrzgle_lists',
    2121    $wpdb->prefix . 'mrzgle_items',
    2222];
    2323
    24 foreach ( $tables as $table ) {
    25     $wpdb->query( "DROP TABLE IF EXISTS {$table}" ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
     24foreach ( $mrzgle_tables as $mrzgle_table ) {
     25    // Nom de table construit à partir de $wpdb->prefix et d'une liste fixe : rien à préparer ni à mettre en cache.
     26    $wpdb->query( "DROP TABLE IF EXISTS {$mrzgle_table}" ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange
    2627}
    2728
    2829// Supprime les options
    29 $options = [
     30$mrzgle_options = [
    3031    'mrzgle_db_version',
    3132    'mrzgle_page_id',
    … …  
    4041];
    4142
    42 foreach ( $options as $option ) {
    43     delete_option( $option );
     43foreach ( $mrzgle_options as $mrzgle_option ) {
     44    delete_option( $mrzgle_option );
    4445}
    4546
    4647// Supprime les capabilities
    47 $roles = [ 'administrator', 'shop_manager' ];
    48 $capabilities = [ 'mrzgle_manage_lists', 'mrzgle_edit_lists', 'mrzgle_delete_lists' ];
     48$mrzgle_roles = [ 'administrator', 'shop_manager' ];
     49$mrzgle_capabilities = [ 'mrzgle_manage_lists', 'mrzgle_edit_lists', 'mrzgle_delete_lists' ];
    4950
    50 foreach ( $roles as $role_name ) {
    51     $role = get_role( $role_name );
    52     if ( $role ) {
    53         foreach ( $capabilities as $cap ) {
    54             $role->remove_cap( $cap );
     51foreach ( $mrzgle_roles as $mrzgle_role_name ) {
     52    $mrzgle_role = get_role( $mrzgle_role_name );
     53    if ( $mrzgle_role ) {
     54        foreach ( $mrzgle_capabilities as $mrzgle_cap ) {
     55            $mrzgle_role->remove_cap( $mrzgle_cap );
    5556        }
    5657    }
  • mrz-gift-lists-exp/trunk/includes/admin/class-list-table.php

    r3780021 r3780103  
    165165                LIMIT %d OFFSET %d";
    166166
    167         return $wpdb->get_results( $wpdb->prepare( $sql, $params ) );
     167        // $orderby, $order et le nom de table sont en liste blanche ou constants (voir plus haut) ; les valeurs passent par prepare().
     168        return $wpdb->get_results( $wpdb->prepare( $sql, $params ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, PluginCheck.Security.DirectDB.UnescapedDBParameter, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
    168169    }
    169170
  • mrz-gift-lists-exp/trunk/includes/admin/pages/class-settings-page.php

    r3777163 r3780103  
    145145        wp_dropdown_pages( [
    146146            'name'              => 'mrzgle_page_id',
    147             'selected'          => $page_id,
    148             'show_option_none'  => __( '-- Select --', 'mrz-gift-lists-exp' ),
     147            'selected'          => absint( $page_id ),
     148            'show_option_none'  => esc_html__( '-- Select --', 'mrz-gift-lists-exp' ),
    149149            'option_none_value' => 0,
    150150        ] );
    … …  
    159159        wp_dropdown_pages( [
    160160            'name'              => 'mrzgle_shop_page_id',
    161             'selected'          => $page_id,
    162             'show_option_none'  => __( '-- Select --', 'mrz-gift-lists-exp' ),
     161            'selected'          => absint( $page_id ),
     162            'show_option_none'  => esc_html__( '-- Select --', 'mrz-gift-lists-exp' ),
    163163            'option_none_value' => 0,
    164164        ] );
  • mrz-gift-lists-exp/trunk/includes/ajax/class-handler.php

    r3777163 r3780103  
    337337            'mrzgle_item_id'    => $item_id,
    338338            'mrzgle_list_title' => $this->list_repo->find( $list_id )->title ?? '',
    339             'unique_key'      => md5( microtime() . rand() ),
     339            'unique_key'      => md5( microtime() . wp_rand() ),
    340340        ] );
    341341
  • mrz-gift-lists-exp/trunk/includes/frontend/shortcodes/class-gift-lists-shortcode.php

    r3780021 r3780103  
    179179
    180180            <div class="mrz-gle-row-actions">
    181                 <a class="mrz-gle-btn mrz-gle-btn-small mrz-gle-btn-icon" href="<?php echo esc_url( $list_url ); ?>" title="<?php esc_attr_e( 'View', 'mrz-gift-lists-exp' ); ?>"><?php echo $this->icon( 'eye', __( 'View', 'mrz-gift-lists-exp' ) ); ?></a>
    182                 <a class="mrz-gle-btn mrz-gle-btn-small mrz-gle-btn-icon" href="<?php echo esc_url( add_query_arg( [ 'action' => 'edit', 'list_id' => $list->id ], \Mrzgle\Plugin::instance()->get_lists_page_url() ) ); ?>" title="<?php esc_attr_e( 'Edit', 'mrz-gift-lists-exp' ); ?>"><?php echo $this->icon( 'edit', __( 'Edit', 'mrz-gift-lists-exp' ) ); ?></a>
     181                <a class="mrz-gle-btn mrz-gle-btn-small mrz-gle-btn-icon" href="<?php echo esc_url( $list_url ); ?>" title="<?php esc_attr_e( 'View', 'mrz-gift-lists-exp' ); ?>"><?php $this->render_icon( 'eye', __( 'View', 'mrz-gift-lists-exp' ) ); ?></a>
     182                <a class="mrz-gle-btn mrz-gle-btn-small mrz-gle-btn-icon" href="<?php echo esc_url( add_query_arg( [ 'action' => 'edit', 'list_id' => $list->id ], \Mrzgle\Plugin::instance()->get_lists_page_url() ) ); ?>" title="<?php esc_attr_e( 'Edit', 'mrz-gift-lists-exp' ); ?>"><?php $this->render_icon( 'edit', __( 'Edit', 'mrz-gift-lists-exp' ) ); ?></a>
    183183                <form method="post" class="mrz-gle-list-manage">
    184184                    <?php wp_nonce_field( 'mrzgle_owner_list_action_' . $list->id, 'mrzgle_list_nonce' ); ?>
    … …  
    186186                    <input type="hidden" name="mrzgle_return" value="my-lists">
    187187                    <?php if ( $is_active ) : ?>
    188                         <button type="submit" name="mrzgle_list_action" value="deactivate" class="mrz-gle-btn mrz-gle-btn-small mrz-gle-btn-icon" title="<?php esc_attr_e( 'Deactivate', 'mrz-gift-lists-exp' ); ?>"><?php echo $this->icon( 'pause-circle', __( 'Deactivate', 'mrz-gift-lists-exp' ) ); ?></button>
     188                        <button type="submit" name="mrzgle_list_action" value="deactivate" class="mrz-gle-btn mrz-gle-btn-small mrz-gle-btn-icon" title="<?php esc_attr_e( 'Deactivate', 'mrz-gift-lists-exp' ); ?>"><?php $this->render_icon( 'pause-circle', __( 'Deactivate', 'mrz-gift-lists-exp' ) ); ?></button>
    189189                    <?php else : ?>
    190                         <button type="submit" name="mrzgle_list_action" value="activate" class="mrz-gle-btn mrz-gle-btn-small mrz-gle-btn-icon" title="<?php esc_attr_e( 'Activate', 'mrz-gift-lists-exp' ); ?>"><?php echo $this->icon( 'play-circle', __( 'Activate', 'mrz-gift-lists-exp' ) ); ?></button>
     190                        <button type="submit" name="mrzgle_list_action" value="activate" class="mrz-gle-btn mrz-gle-btn-small mrz-gle-btn-icon" title="<?php esc_attr_e( 'Activate', 'mrz-gift-lists-exp' ); ?>"><?php $this->render_icon( 'play-circle', __( 'Activate', 'mrz-gift-lists-exp' ) ); ?></button>
    191191                    <?php endif; ?>
    192192                    <button type="submit" name="mrzgle_list_action" value="delete" class="mrz-gle-btn mrz-gle-btn-small mrz-gle-btn-icon mrz-gle-btn-danger mrz-gle-confirm" title="<?php esc_attr_e( 'Delete', 'mrz-gift-lists-exp' ); ?>"
    193                             data-confirm="<?php esc_attr_e( 'Permanently delete this list?', 'mrz-gift-lists-exp' ); ?>"><?php echo $this->icon( 'trash', __( 'Delete', 'mrz-gift-lists-exp' ) ); ?></button>
     193                            data-confirm="<?php esc_attr_e( 'Permanently delete this list?', 'mrz-gift-lists-exp' ); ?>"><?php $this->render_icon( 'trash', __( 'Delete', 'mrz-gift-lists-exp' ) ); ?></button>
    194194                </form>
    195195            </div>
    … …  
    219219                <?php if ( Frontend::can_create_list() ) : ?>
    220220                    <a href="<?php echo esc_url( add_query_arg( 'action', 'create' ) ); ?>" class="mrz-gle-btn mrz-gle-btn-primary">
    221                         <?php echo $this->icon( 'add', '' ); ?> <?php esc_html_e( 'New list', 'mrz-gift-lists-exp' ); ?>
     221                        <?php $this->render_icon( 'add', '' ); ?> <?php esc_html_e( 'New list', 'mrz-gift-lists-exp' ); ?>
    222222                    </a>
    223223                <?php endif; ?>
    … …  
    628628                <div class="mrz-gle-owner-actions">
    629629                    <a href="<?php echo esc_url( $this->get_shop_url() ); ?>" class="mrz-gle-btn mrz-gle-btn-primary">
    630                         <?php echo $this->icon( 'add', '' ); ?> <?php esc_html_e( 'Add product', 'mrz-gift-lists-exp' ); ?>
     630                        <?php $this->render_icon( 'add', '' ); ?> <?php esc_html_e( 'Add product', 'mrz-gift-lists-exp' ); ?>
    631631                    </a>
    632632
    633633                    <a href="<?php echo esc_url( add_query_arg( [ 'action' => 'edit', 'list_id' => $list->id ], \Mrzgle\Plugin::instance()->get_lists_page_url() ) ); ?>" class="mrz-gle-btn">
    634                         <?php echo $this->icon( 'edit', '' ); ?> <?php esc_html_e( 'Edit', 'mrz-gift-lists-exp' ); ?>
     634                        <?php $this->render_icon( 'edit', '' ); ?> <?php esc_html_e( 'Edit', 'mrz-gift-lists-exp' ); ?>
    635635                    </a>
    636636
    … …  
    640640                        <input type="hidden" name="mrzgle_return" value="list">
    641641                        <?php if ( 'active' === $list->status ) : ?>
    642                             <button type="submit" name="mrzgle_list_action" value="deactivate" class="mrz-gle-btn"><?php echo $this->icon( 'pause-circle', '' ); ?> <?php esc_html_e( 'Deactivate', 'mrz-gift-lists-exp' ); ?></button>
     642                            <button type="submit" name="mrzgle_list_action" value="deactivate" class="mrz-gle-btn"><?php $this->render_icon( 'pause-circle', '' ); ?> <?php esc_html_e( 'Deactivate', 'mrz-gift-lists-exp' ); ?></button>
    643643                        <?php else : ?>
    644                             <button type="submit" name="mrzgle_list_action" value="activate" class="mrz-gle-btn"><?php echo $this->icon( 'play-circle', '' ); ?> <?php esc_html_e( 'Activate', 'mrz-gift-lists-exp' ); ?></button>
     644                            <button type="submit" name="mrzgle_list_action" value="activate" class="mrz-gle-btn"><?php $this->render_icon( 'play-circle', '' ); ?> <?php esc_html_e( 'Activate', 'mrz-gift-lists-exp' ); ?></button>
    645645                        <?php endif; ?>
    646646                        <button type="submit" name="mrzgle_list_action" value="delete" class="mrz-gle-btn mrz-gle-btn-danger mrz-gle-confirm"
    647                                 data-confirm="<?php esc_attr_e( 'Permanently delete this list?', 'mrz-gift-lists-exp' ); ?>"><?php echo $this->icon( 'trash', '' ); ?> <?php esc_html_e( 'Delete', 'mrz-gift-lists-exp' ); ?></button>
     647                                data-confirm="<?php esc_attr_e( 'Permanently delete this list?', 'mrz-gift-lists-exp' ); ?>"><?php $this->render_icon( 'trash', '' ); ?> <?php esc_html_e( 'Delete', 'mrz-gift-lists-exp' ); ?></button>
    648648                    </form>
    649649                </div>
    … …  
    688688                            <p class="mrz-gle-empty-actions">
    689689                                <a href="<?php echo esc_url( $this->get_shop_url() ); ?>" class="mrz-gle-btn mrz-gle-btn-primary">
    690                                     <?php echo $this->icon( 'add', '' ); ?> <?php esc_html_e( 'Add product', 'mrz-gift-lists-exp' ); ?>
     690                                    <?php $this->render_icon( 'add', '' ); ?> <?php esc_html_e( 'Add product', 'mrz-gift-lists-exp' ); ?>
    691691                                </a>
    692692                            </p>
    … …  
    743743
    744744                <a class="mrz-gle-btn mrz-gle-btn-small mrz-gle-btn-icon" href="<?php echo esc_url( $item->product_url ); ?>" title="<?php esc_attr_e( 'View product', 'mrz-gift-lists-exp' ); ?>">
    745                     <?php echo $this->icon( 'eye', __( 'View product', 'mrz-gift-lists-exp' ) ); ?>
     745                    <?php $this->render_icon( 'eye', __( 'View product', 'mrz-gift-lists-exp' ) ); ?>
    746746                </a>
    747747
    … …  
    751751                            data-item-id="<?php echo esc_attr( $item->id ); ?>"
    752752                            title="<?php esc_attr_e( 'Favorite (show at the top)', 'mrz-gift-lists-exp' ); ?>">
    753                         <?php echo $this->icon( $item->priority ? 'star-active' : 'star', __( 'Favorite', 'mrz-gift-lists-exp' ) ); ?>
     753                        <?php $this->render_icon( $item->priority ? 'star-active' : 'star', __( 'Favorite', 'mrz-gift-lists-exp' ) ); ?>
    754754                    </button>
    755755                    <button type="button"
    … …  
    757757                            data-item-id="<?php echo esc_attr( $item->id ); ?>"
    758758                            title="<?php esc_attr_e( 'Remove from list', 'mrz-gift-lists-exp' ); ?>">
    759                         <?php echo $this->icon( 'trash', __( 'Remove from list', 'mrz-gift-lists-exp' ) ); ?>
     759                        <?php $this->render_icon( 'trash', __( 'Remove from list', 'mrz-gift-lists-exp' ) ); ?>
    760760                    </button>
    761761                <?php endif; ?>
    … …  
    783783
    784784    /**
    785      * Retourne la balise <img> d'une icône du plugin (assets/img/<name>.svg).
     785     * Affiche la balise <img> d'une icône du plugin (assets/img/<name>.svg).
    786786     *
    787787     * @param string $name  Nom du fichier, sans extension.
    788788     * @param string $label Texte alternatif (accessibilité).
    789      * @return string
    790      */
    791     private function icon( string $name, string $label ): string {
    792         return sprintf(
     789     */
     790    private function render_icon( string $name, string $label ): void {
     791        printf(
    793792            '<img class="mrz-gle-icon" src="%s" alt="%s">',
    794793            esc_url( MRZGLE_PLUGIN_URL . 'assets/img/' . $name . '.svg' ),
    … …  
    812811                <input type="text" class="mrz-gle-share-url" value="<?php echo esc_url( $list_url ); ?>" readonly>
    813812                <button type="button" class="mrz-gle-btn mrz-gle-share-copy" data-url="<?php echo esc_attr( $list_url ); ?>">
    814                     <?php echo $this->icon( 'copy-alt', '' ); ?> <?php esc_html_e( 'Copy link', 'mrz-gift-lists-exp' ); ?>
     813                    <?php $this->render_icon( 'copy-alt', '' ); ?> <?php esc_html_e( 'Copy link', 'mrz-gift-lists-exp' ); ?>
    815814                </button>
    816815            </div>
  • mrz-gift-lists-exp/trunk/includes/integrations/class-woo-commerce.php

    r3777163 r3780103  
    151151
    152152                // Clé unique pour permettre le même produit plusieurs fois
    153                 $cart_item_data['unique_key'] = md5( microtime() . rand() );
     153                $cart_item_data['unique_key'] = md5( microtime() . wp_rand() );
    154154            }
    155155        }
  • mrz-gift-lists-exp/trunk/languages/mrz-gift-lists-exp-fr_FR.l10n.php

    r3780021 r3780103  
    11<?php
    2 return ['domain'=>'mrz-gift-lists-exp','plural-forms'=>'nplurals=2; plural=(n > 1);','language'=>'fr_FR','project-id-version'=>'MRZ Gift Lists 0.12.1','pot-creation-date'=>'2026-10-31T16:37:09+00:00','po-revision-date'=>'2026-10-31 16:37+0000','x-generator'=>'WP-CLI 2.12.0','messages'=>['MRZ Gift Lists Exp'=>'MRZ Gift Lists Exp','https://github.com/m0r3z/mrz-gift-lists-exp'=>'https://github.com/m0r3z/mrz-gift-lists-exp','Gift lists for WooCommerce: your customers build a list of products to receive, share the link, and their friends and family buy them.'=>'Listes de cadeaux pour WooCommerce : vos clients créent une liste de produits, partagent le lien, et leurs proches achètent.','Morez.co'=>'Morez.co','https://morez.co'=>'https://morez.co','MRZ Gift Lists: no lists page is set. Create a page containing the [mrzgle_lists] shortcode, then select it in the settings.'=>'MRZ Gift Lists : aucune page des listes n\'est définie. Créez une page contenant le shortcode [mrzgle_lists], puis sélectionnez-la dans les réglages.','Open settings'=>'Ouvrir les réglages','MRZ Gift Lists'=>'MRZ Gift Lists','All lists'=>'Toutes les listes','Settings'=>'Réglages','Title'=>'Titre','Creator'=>'Créateur','Products'=>'Produits','Status'=>'Statut','Date'=>'Date','View details'=>'Voir détails','View on site'=>'Voir sur le site','Are you sure you want to delete this list?'=>'Êtes-vous sûr de vouloir supprimer cette liste ?','Delete'=>'Supprimer','Deleted user'=>'Utilisateur supprimé','purchased'=>'achetés','Active'=>'Active','Archived'=>'Archivée','Completed'=>'Terminée','No lists found.'=>'Aucune liste trouvée.','All statuses'=>'Tous les statuts','Filter'=>'Filtrer','Action not allowed.'=>'Action non autorisée.','Gift lists'=>'Listes de cadeaux','Search'=>'Rechercher','List not found.'=>'Liste non trouvée.','Back'=>'Retour','Details'=>'Informations','Date created'=>'Date de création','Event date'=>'Date de l\'événement','Access key'=>'Clé d\'accès','View'=>'Voir','Description'=>'Description','No products in this list.'=>'Aucun produit dans cette liste.','Product'=>'Produit','Price'=>'Prix','Purchased by'=>'Acheté par','Favorite'=>'Favori','Available'=>'Disponible','Reserved'=>'Réservé','Purchased'=>'Acheté','Statistics'=>'Statistiques','products in total'=>'produits au total','available'=>'disponibles','Actions'=>'Actions','View list'=>'Voir la liste','Archive'=>'Archiver','Reactivate'=>'Réactiver','List deleted successfully.'=>'Liste supprimée avec succès.','List archived successfully.'=>'Liste archivée avec succès.','List reactivated successfully.'=>'Liste réactivée avec succès.','General settings'=>'Réglages généraux','Lists page'=>'Page des listes','Shop page'=>'Page boutique','Max lists per user'=>'Listes max par utilisateur','Emails'=>'Emails','Admin email'=>'Email administrateur','Notify the list creator'=>'Notifier le créateur','You do not have sufficient permissions.'=>'Vous n\'avez pas les droits nécessaires.','MRZ Gift Lists settings'=>'Réglages MRZ Gift Lists','Configure the general plugin options.'=>'Configurez les options générales du plugin.','Configure email notifications.'=>'Configurez les notifications par email.','-- Select --'=>'-- Sélectionner --','Page containing the [mrzgle_lists] shortcode.'=>'Page contenant le shortcode [mrzgle_lists].','Page that a list’s “Add product” button links to. Defaults to the WooCommerce shop page.'=>'Page vers laquelle renvoie le bouton « Ajouter un produit » d\'une liste. Par défaut, la page boutique WooCommerce.','Maximum number of active lists per user (0 = unlimited).'=>'Nombre maximum de listes actives par utilisateur (0 = illimité).','Email address that receives notifications (leave empty to disable).'=>'Email pour recevoir les notifications (laisser vide pour désactiver).','Send an email to the list creator when a product is purchased'=>'Envoyer un email au créateur de la liste quand un produit est acheté','Security check failed. Please refresh the page.'=>'Erreur de sécurité. Veuillez rafraîchir la page.','You must be logged in.'=>'Vous devez être connecté.','You are not allowed to edit this list.'=>'Vous n\'êtes pas autorisé à modifier cette liste.','Missing data.'=>'Données manquantes.','Product not found.'=>'Produit introuvable.','This product is already in the list.'=>'Ce produit est déjà dans la liste.','Product added to the list.'=>'Produit ajouté à la liste.','Product removed from the list.'=>'Produit retiré de la liste.','Error while deleting.'=>'Erreur lors de la suppression.','Marked as priority.'=>'Marqué comme prioritaire.','Priority removed.'=>'Priorité retirée.','Nothing to update.'=>'Aucune donnée à mettre à jour.','List updated.'=>'Liste mise à jour.','Error while updating.'=>'Erreur lors de la mise à jour.','List deleted.'=>'Liste supprimée.','Product not found in the list.'=>'Produit introuvable dans la liste.','This product has already been gifted.'=>'Ce produit a déjà été offert.','Product added to the cart.'=>'Produit ajouté au panier.','Error while adding to the cart.'=>'Erreur lors de l\'ajout au panier.','Are you sure you want to delete this item?'=>'Êtes-vous sûr de vouloir supprimer cet élément ?','Adding...'=>'Ajout en cours...','Added!'=>'Ajouté !','An error occurred'=>'Une erreur est survenue','Product added to the list'=>'Produit ajouté à la liste','Product removed from the list'=>'Produit retiré de la liste','Product added to the cart'=>'Produit ajouté au panier','Link copied!'=>'Lien copié !','Please select a list.'=>'Veuillez sélectionner une liste.','Are you sure you want to delete this?'=>'Êtes-vous sûr de vouloir supprimer ?','Saved'=>'Enregistré','Error'=>'Erreur','[%s] New gift list created'=>'[%s] Nouvelle liste de cadeaux créée','🎁 A gift has been purchased from your list "%s"'=>'🎁 Un cadeau a été offert depuis votre liste "%s"','[%s] Purchase from a gift list'=>'[%s] Achat depuis une liste de cadeaux','Unknown'=>'Inconnu','
     2return ['domain'=>'mrz-gift-lists-exp','plural-forms'=>'nplurals=2; plural=(n > 1);','language'=>'fr_FR','project-id-version'=>'MRZ Gift Lists 0.12.2','pot-creation-date'=>'2026-10-31T16:37:09+00:00','po-revision-date'=>'2026-10-31 16:37+0000','x-generator'=>'WP-CLI 2.12.0','messages'=>['MRZ Gift Lists Exp'=>'MRZ Gift Lists Exp','https://github.com/m0r3z/mrz-gift-lists-exp'=>'https://github.com/m0r3z/mrz-gift-lists-exp','Gift lists for WooCommerce: your customers build a list of products to receive, share the link, and their friends and family buy them.'=>'Listes de cadeaux pour WooCommerce : vos clients créent une liste de produits, partagent le lien, et leurs proches achètent.','Morez.co'=>'Morez.co','https://morez.co'=>'https://morez.co','MRZ Gift Lists: no lists page is set. Create a page containing the [mrzgle_lists] shortcode, then select it in the settings.'=>'MRZ Gift Lists : aucune page des listes n\'est définie. Créez une page contenant le shortcode [mrzgle_lists], puis sélectionnez-la dans les réglages.','Open settings'=>'Ouvrir les réglages','MRZ Gift Lists'=>'MRZ Gift Lists','All lists'=>'Toutes les listes','Settings'=>'Réglages','Title'=>'Titre','Creator'=>'Créateur','Products'=>'Produits','Status'=>'Statut','Date'=>'Date','View details'=>'Voir détails','View on site'=>'Voir sur le site','Are you sure you want to delete this list?'=>'Êtes-vous sûr de vouloir supprimer cette liste ?','Delete'=>'Supprimer','Deleted user'=>'Utilisateur supprimé','purchased'=>'achetés','Active'=>'Active','Archived'=>'Archivée','Completed'=>'Terminée','No lists found.'=>'Aucune liste trouvée.','All statuses'=>'Tous les statuts','Filter'=>'Filtrer','Action not allowed.'=>'Action non autorisée.','Gift lists'=>'Listes de cadeaux','Search'=>'Rechercher','List not found.'=>'Liste non trouvée.','Back'=>'Retour','Details'=>'Informations','Date created'=>'Date de création','Event date'=>'Date de l\'événement','Access key'=>'Clé d\'accès','View'=>'Voir','Description'=>'Description','No products in this list.'=>'Aucun produit dans cette liste.','Product'=>'Produit','Price'=>'Prix','Purchased by'=>'Acheté par','Favorite'=>'Favori','Available'=>'Disponible','Reserved'=>'Réservé','Purchased'=>'Acheté','Statistics'=>'Statistiques','products in total'=>'produits au total','available'=>'disponibles','Actions'=>'Actions','View list'=>'Voir la liste','Archive'=>'Archiver','Reactivate'=>'Réactiver','List deleted successfully.'=>'Liste supprimée avec succès.','List archived successfully.'=>'Liste archivée avec succès.','List reactivated successfully.'=>'Liste réactivée avec succès.','General settings'=>'Réglages généraux','Lists page'=>'Page des listes','Shop page'=>'Page boutique','Max lists per user'=>'Listes max par utilisateur','Emails'=>'Emails','Admin email'=>'Email administrateur','Notify the list creator'=>'Notifier le créateur','You do not have sufficient permissions.'=>'Vous n\'avez pas les droits nécessaires.','MRZ Gift Lists settings'=>'Réglages MRZ Gift Lists','Configure the general plugin options.'=>'Configurez les options générales du plugin.','Configure email notifications.'=>'Configurez les notifications par email.','-- Select --'=>'-- Sélectionner --','Page containing the [mrzgle_lists] shortcode.'=>'Page contenant le shortcode [mrzgle_lists].','Page that a list’s “Add product” button links to. Defaults to the WooCommerce shop page.'=>'Page vers laquelle renvoie le bouton « Ajouter un produit » d\'une liste. Par défaut, la page boutique WooCommerce.','Maximum number of active lists per user (0 = unlimited).'=>'Nombre maximum de listes actives par utilisateur (0 = illimité).','Email address that receives notifications (leave empty to disable).'=>'Email pour recevoir les notifications (laisser vide pour désactiver).','Send an email to the list creator when a product is purchased'=>'Envoyer un email au créateur de la liste quand un produit est acheté','Security check failed. Please refresh the page.'=>'Erreur de sécurité. Veuillez rafraîchir la page.','You must be logged in.'=>'Vous devez être connecté.','You are not allowed to edit this list.'=>'Vous n\'êtes pas autorisé à modifier cette liste.','Missing data.'=>'Données manquantes.','Product not found.'=>'Produit introuvable.','This product is already in the list.'=>'Ce produit est déjà dans la liste.','Product added to the list.'=>'Produit ajouté à la liste.','Product removed from the list.'=>'Produit retiré de la liste.','Error while deleting.'=>'Erreur lors de la suppression.','Marked as priority.'=>'Marqué comme prioritaire.','Priority removed.'=>'Priorité retirée.','Nothing to update.'=>'Aucune donnée à mettre à jour.','List updated.'=>'Liste mise à jour.','Error while updating.'=>'Erreur lors de la mise à jour.','List deleted.'=>'Liste supprimée.','Product not found in the list.'=>'Produit introuvable dans la liste.','This product has already been gifted.'=>'Ce produit a déjà été offert.','Product added to the cart.'=>'Produit ajouté au panier.','Error while adding to the cart.'=>'Erreur lors de l\'ajout au panier.','Are you sure you want to delete this item?'=>'Êtes-vous sûr de vouloir supprimer cet élément ?','Adding...'=>'Ajout en cours...','Added!'=>'Ajouté !','An error occurred'=>'Une erreur est survenue','Product added to the list'=>'Produit ajouté à la liste','Product removed from the list'=>'Produit retiré de la liste','Product added to the cart'=>'Produit ajouté au panier','Link copied!'=>'Lien copié !','Please select a list.'=>'Veuillez sélectionner une liste.','Are you sure you want to delete this?'=>'Êtes-vous sûr de vouloir supprimer ?','Saved'=>'Enregistré','Error'=>'Erreur','[%s] New gift list created'=>'[%s] Nouvelle liste de cadeaux créée','🎁 A gift has been purchased from your list "%s"'=>'🎁 Un cadeau a été offert depuis votre liste "%s"','[%s] Purchase from a gift list'=>'[%s] Achat depuis une liste de cadeaux','Unknown'=>'Inconnu','
    33
    44Message: %s'=>'
  • mrz-gift-lists-exp/trunk/languages/mrz-gift-lists-exp-fr_FR.po

    r3780021 r3780103  
    11msgid ""
    22msgstr ""
    3 "Project-Id-Version: MRZ Gift Lists 0.12.1\n"
     3"Project-Id-Version: MRZ Gift Lists 0.12.2\n"
    44"Report-Msgid-Bugs-To: https://github.com/m0r3z/mrz-gift-lists-exp\n"
    55"Last-Translator: Morez.co <hello@morez.co>\n"
  • mrz-gift-lists-exp/trunk/languages/mrz-gift-lists-exp.pot

    r3780021 r3780103  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: MRZ Gift Lists Exp 0.12.1\n"
     5"Project-Id-Version: MRZ Gift Lists Exp 0.12.2\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/mrz-gift-lists-exp\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
  • mrz-gift-lists-exp/trunk/mrz-gift-lists-exp.php

    r3780021 r3780103  
    44 * Plugin URI:        https://github.com/m0r3z/mrz-gift-lists-exp
    55 * Description:       Gift lists for WooCommerce: your customers build a list of products to receive, share the link, and their friends and family buy them.
    6  * Version:           0.12.1
     6 * Version:           0.12.2
    77 * Requires at least: 6.0
    88 * Requires PHP:      8.0
    … …  
    3030
    3131// Constantes du plugin
    32 define( 'MRZGLE_VERSION', '0.12.1' );
     32define( 'MRZGLE_VERSION', '0.12.2' );
    3333define( 'MRZGLE_PLUGIN_FILE', __FILE__ );
    3434define( 'MRZGLE_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
  • mrz-gift-lists-exp/trunk/readme.txt

    r3780021 r3780103  
    55Tested up to: 7.1
    66Requires PHP: 8.0
    7 Stable tag: 0.12.1
     7Stable tag: 0.12.2
    88License: GPLv3 or later
    99License URI: https://www.gnu.org/licenses/gpl-3.0.html
    … …  
    6060
    6161== Changelog ==
     62
     63= 0.12.2 =
     64* Security: escaped the page dropdowns on the settings screen.
     65* Use wp_rand() instead of rand() when adding a gift to the cart.
     66* Code cleanup for Plugin Check: icons are printed with escaped output, the admin list query and the uninstall routine are documented, and uninstall variables are prefixed.
    6267
    6368= 0.12.1 =
  • mrz-gift-lists-exp/trunk/uninstall.php

    r3679573 r3780103  
    1717
    1818// Supprime les tables
    19 $tables = [
     19$mrzgle_tables = [
    2020    $wpdb->prefix . 'mrzgle_lists',
    2121    $wpdb->prefix . 'mrzgle_items',
    2222];
    2323
    24 foreach ( $tables as $table ) {
    25     $wpdb->query( "DROP TABLE IF EXISTS {$table}" ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
     24foreach ( $mrzgle_tables as $mrzgle_table ) {
     25    // Nom de table construit à partir de $wpdb->prefix et d'une liste fixe : rien à préparer ni à mettre en cache.
     26    $wpdb->query( "DROP TABLE IF EXISTS {$mrzgle_table}" ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange
    2627}
    2728
    2829// Supprime les options
    29 $options = [
     30$mrzgle_options = [
    3031    'mrzgle_db_version',
    3132    'mrzgle_page_id',
    … …  
    4041];
    4142
    42 foreach ( $options as $option ) {
    43     delete_option( $option );
     43foreach ( $mrzgle_options as $mrzgle_option ) {
     44    delete_option( $mrzgle_option );
    4445}
    4546
    4647// Supprime les capabilities
    47 $roles = [ 'administrator', 'shop_manager' ];
    48 $capabilities = [ 'mrzgle_manage_lists', 'mrzgle_edit_lists', 'mrzgle_delete_lists' ];
     48$mrzgle_roles = [ 'administrator', 'shop_manager' ];
     49$mrzgle_capabilities = [ 'mrzgle_manage_lists', 'mrzgle_edit_lists', 'mrzgle_delete_lists' ];
    4950
    50 foreach ( $roles as $role_name ) {
    51     $role = get_role( $role_name );
    52     if ( $role ) {
    53         foreach ( $capabilities as $cap ) {
    54             $role->remove_cap( $cap );
     51foreach ( $mrzgle_roles as $mrzgle_role_name ) {
     52    $mrzgle_role = get_role( $mrzgle_role_name );
     53    if ( $mrzgle_role ) {
     54        foreach ( $mrzgle_capabilities as $mrzgle_cap ) {
     55            $mrzgle_role->remove_cap( $mrzgle_cap );
    5556        }
    5657    }
Note: See TracChangeset for help on using the changeset viewer.