Intégration de l'API Community Builder dans BreezingForms

Réduire
X
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Intégration de l'API Community Builder dans BreezingForms

    Bonsoir à tous,
    Mon petit doigt me dit que ce sujet aura une saveur particulière pour certains

    Certes j'ai peu de messages au compteur de ce fabuleux forum, je n'utilise Joomla! que depuis 4 mois mais je vais essayer de rentrer un peu plus dans la royaume des braves en tentant de franchir un nouvel Everest (rapport à mon niveau technique, en tout cas).

    Bon la grande idée du jour est la suivante : je voudrais pouvoir déclencher automatiquement la création d'un nouvel utilisateur dans Community Builder à partir d'informations minimales (identifiant, mot de passe et email) qu'un internaute aura saisies puis soumises par le biais d'un formulaire créé avec BreezingForms.

    Mais je n'arrive pas seul avec mon problème, j'ai dans ma besace un début de réflexion et les éléments de recherche suivants relatifs à l'utilisation de l'API Community Builder :

    Importation des fondations CB dans un composant/module/plugin :
    Code PHP:
    global $_CB_framework$mainframe;
     
    if ( 
    defined'JPATH_ADMINISTRATOR' ) ) {
        if ( ! 
    file_existsJPATH_ADMINISTRATOR '/components/com_comprofiler/plugin.foundation.php' ) ) {
            echo 
    'CB not installed!';
            return;
        }
     
        include_once( 
    JPATH_ADMINISTRATOR '/components/com_comprofiler/plugin.foundation.php' );
    } else {
        if ( ! 
    file_exists$mainframe->getCfg'absolute_path' ) . '/administrator/components/com_comprofiler/plugin.foundation.php' ) ) {
            echo 
    'CB not installed!';
            return;
        }
     
        include_once( 
    $mainframe->getCfg'absolute_path' ) . '/administrator/components/com_comprofiler/plugin.foundation.php' );

    Importation d'autres fonctions additionnelles en option :
    Code PHP:
    cbimport'cb.database' ); // Fonctions de base de données
    cbimport'language.front' ); // Langue pour CB
    cbimport'cb.snoopy' ); // Fonctions Snoopy
    cbimport'cb.imgtoolbox' ); // Fonctions de ImageToolbox
    cbimport'cb.html' ); // Classes et fonctions de rendu HTML
    cbimport'cb.plugins' ); // Fonctions d'accès aux plugins CB 
    Et enfin 1 fonction de création d'un utilisateur en utilisant l'API préalablement inclue :
    Code PHP:
    function registerUser$fname$lname$email$username$password$approve 0$confirm ) {
        global 
    $_CB_framework$_CB_database$ueConfig;
     
        
    $approval            =    ( $approve == $ueConfig['reg_admin_approval'] : $approve );
        
    $confirmation            =    ( $confirm == $ueConfig['reg_confirmation'] : $confirm );
         
    $usertype            =    $_CB_framework->getCfg'new_usertype' );
     
        
    $row                =    new moscomprofilerUser$_CB_database );
        
    $row->usertype            =    ( $usertype $usertype 'Registered' );
        
    $row->gid            =    $_CB_framework->acl->get_group_id$row->usertype'ARO' );
        
    $row->sendEmail            =    0;
        
    $row->registerDate        =    date'Y-m-d H:i:s'$_CB_framework->now() );
        
    $row->name            =    $fname ' ' $lname;
        
    $row->firstname            =    $fname;
        
    $row->lastname            =    $lname;
        
    $row->username            =    $username;
        
    $row->email            =    $email;
        
    $row->password            =    cbHashPassword$password );
        
    $row->registeripaddr        =    cbGetIPlist();
     
        if ( 
    $approval == ) {
            
    $row->approved        =    1;
        } else {
            
    $row->approved        =    0;
        }
     
        if ( 
    $confirmation == ) {
            
    $row->confirmed        =    1;
        } else {
            
    $row->confirmed        =    0;
        }
     
        if ( ( 
    $row->confirmed == ) && ( $row->approved == ) ) {
            
    $row->block        =    0;
        } else {
            
    $row->block        =    1;
        }
     
        if ( 
    $row->store() ) {
            if ( ( 
    $row->confirmed == ) && ( $confirmation != ) ) {
                
    $row->_setActivationCode();
     
                if ( ! 
    $row->store() ) {
                    return 
    false;
                }
            }
     
            return 
    true;
        }
     
        return 
    false;

    J'ai le sentiment qu'avec tout ce matos, je dois pouvoir obtenir le résultat souhaité.
    Mon problème est de savoir où insérer ces différents bouts de code.

    Si je me risque à présenter ma compréhension basique de ce sujet, l'importation de l'API (fondations et autres fonctions additionnelles) doit se faire directement dans le composant BreezingForms et l'appel à la fonction registerUser doit se faire lors de la validation/soumission du formulaire en lui passant les paramètres qui vont bien (identifiant, mot de passe, email ...) pour que le nouvel utilisateur soit créé in fine sous CB.

    Est-ce que jusque là j'ai tout bon ?

    Ensuite, et là est véritablement le fond de ma question, dans quel fichier php du composant BrezzingForms dois-je insérer les portions de codes relatives à l'API CB ?

    Idem pour la fonction registerUser ?

    Plus généralement, il semble que ce sujet soit assez trapu mais beaucoup disent qu'une fois maitrisé, il ouvre les portes sur un champ d'investigation considérable quant à l'intégration de CB avec n'importe quel autre composant/module/plugin.

    Merci pour vos éclaircissements.

  • #2
    Re : Intégration de l'API Community Builder dans BreezingForms

    Je continue à chercher de mon côté mais rien de bon, je galère en grand ... petit up siouplé !!!

    Commentaire


    • #3
      Re : Intégration de l'API Community Builder dans BreezingForms

      Bonjour,

      L'import API correspond bien aux tutos.
      l'importation de l'API (fondations et autres fonctions additionnelles) doit se faire directement dans le composant BreezingForms
      L'importation de l'API peut se faire dans un script de type init du formulaire.
      l'appel à la fonction registerUser doit se faire lors de la validation/soumission du formulaire en lui passant les paramètres qui vont bien (identifiant, mot de passe, email ...) pour que le nouvel utilisateur soit créé in fine sous CB.
      De la même manière, en utilisant un script de type soumission personnalisée.
      Pas de demande de support par MP.
      S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

      Commentaire


      • #4
        Re : Intégration de l'API Community Builder dans BreezingForms

        Salut Jisse03 et merci,
        C'est marrant mais j'attendais sereinement que tu te manifestes sur un sujet comme celui là ... comme qui dirait, c'est un peu ton jardin

        Bon je vois que mes analyses de premier niveau n'étaient pas si mauvaises que cela.
        Néanmoins j'ai quelques questions, tu t'en doutes.

        #1 J'ai pas tout bien compris au sujet de l'importation de l'API et des fonctions additionnelles. Dois-je le faire dans un script de type init du formulaire ou dois-je insérer les bouts de code quelque part au début du fichier components\com_breezingforms\breezingforms.php

        Autre question sur l'importation de l'API : parmi les cbimport additionnels, lesquels dois-je importer ? Est-ce que la stratégie de tous les prendre est la bonne ?

        #2 Quand tu écris que l'appel à la fonction registerUser peut se faire dans un script de type soumission personnalisée, je vois grosso modo où cela se passe mais pourrais-tu préciser juste un peu plus, ou donner un exemple de ce genre.
        En fait j'ai déjà crée quelques scripts personnalisés avec breezingforms (pour valider la saisie de certains type de champs par exemple) mais si j'ai tout bien compris, ces scripts utilisent la langage javascripts. Or si je ne m'abuse, la fonction userRegister est en PHP. Comment l'interfacer dans un javascript ? Un exemple pourrait me mettre sur la voie.

        Merci d'avance.

        Bodhi

        Commentaire


        • #5
          Re : Intégration de l'API Community Builder dans BreezingForms

          Suivant le type de code, tu cases ça soit dans les Scripts (JavaScript), soit dans les Pièces (PHP), en faisant bien attention aux règles de nommage, et en évitant les conflits de nom.
          L'import de l'API se fait dans un script (pièce) de classe init.

          Personnellement, pour tous mes PHP personnalisé, dans les pièces, j'utilise lp_ en préfixe de nom de fonction, pour éviter les conflits avec les addons breezing qui ont le préfixe ff_. Un avantage de cette approche est d'étendre certains ff_ en créant une fonction au nom identique mais avec son préfixe, qui rajoute le code voulu avant d'appeler le fonction native

          La meilleure solution pour pouvoir utiliser l'API à chaque fois que tu crées un nouveau formulaire est de caser tes fonctions gérant CB dans un package, puis d'inclure le package dans le formulaire, et dans ce cas, le code développé une fois est réutilisable partout, et de plus, en cas d'ajout de fonctions ou de corrections de bugs, ces ajouts ou corrections se voient automatiquement propagés à tous les formulaires. Mais ce n'est qu'une approche parmi le lot possible.
          Pas de demande de support par MP.
          S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

          Commentaire


          • #6
            Re : Intégration de l'API Community Builder dans BreezingForms

            Suivant le type de code, tu cases ça soit dans les Scripts (JavaScript), soit dans les Pièces (PHP)
            Ahh ben là je découvre un truc !!! Ca me parait un peu plus net à la lueur de cette explication sur la différence entre "Scripts" et "Pieces" dans Breezingforms.
            Je regarde ça ASAP et je reviens en cas de souci (ou pour dire que tout est OK).

            Merci Jisse03.

            Bodhi
            Dernière édition par BODHI à 06/05/2011, 12h31

            Commentaire


            • #7
              Re : Intégration de l'API Community Builder dans BreezingForms

              Jisse03,
              Je reviens au rapport ou plutôt aux infos.
              La situation est la suivante :
              1ère étape
              J'ai crée un formulaire avec les éléments basiques suivants :
              5 champs d'identification :
              cb_lastname
              cb_fisrstname
              cb_username
              cb_password
              cb_email

              et un bouton de validation/soumission du formulaire.

              2ème étape
              J'ai créé la pièce cb_ImportCommunityBuilderAPI suivante:
              Type : Avant le formulaire
              Code PHP:
              global $_CB_framework$mainframe;

              if ( 
              defined'JPATH_ADMINISTRATOR' ) ) {
                  if ( ! 
              file_existsJPATH_ADMINISTRATOR '/components/com_comprofiler/plugin.foundation.php' ) ) {
                      echo 
              'CB not installed!';
                      return;
                  }

                  include_once( 
              JPATH_ADMINISTRATOR '/components/com_comprofiler/plugin.foundation.php' );
              } else {
                  if ( ! 
              file_exists$mainframe->getCfg'absolute_path' ) . '/administrator/components/com_comprofiler/plugin.foundation.php' ) ) {
                      echo 
              'CB not installed!';
                      return;
                  }

                  include_once( 
              $mainframe->getCfg'absolute_path' ) . '/administrator/components/com_comprofiler/plugin.foundation.php' );
              }

              cbimport'cb.database' ); // Fonctions de base de données
              cbimport'language.front' ); // Langue pour CB
              cbimport'cb.html' ); // Classes et fonctions de rendu HTML
              cbimport'cb.plugins' ); // Fonctions d'accès aux plugins CB 
              Dans l'onglet "Pieces de formulaire" de mon formulaire, dans la section avant formulaire/librairie, j'ai associée la pièce cb_ImportCommunityBuilderAPI précédemment créée.

              3ème étape
              J'ai créé la pièce cb_CreateCommunityBuilderUser suivante:
              Code PHP:
              function registerUser$fname$lname$email$username$password$approve 0$confirm ) {
                  global 
              $_CB_framework$_CB_database$ueConfig;
               
                  
              $approval            =    ( $approve == $ueConfig['reg_admin_approval'] : $approve );
                  
              $confirmation            =    ( $confirm == $ueConfig['reg_confirmation'] : $confirm );
                   
              $usertype            =    $_CB_framework->getCfg'new_usertype' );
               
                  
              $row                =    new moscomprofilerUser$_CB_database );
                  
              $row->usertype            =    ( $usertype $usertype 'Registered' );
                  
              $row->gid            =    $_CB_framework->acl->get_group_id$row->usertype'ARO' );
                  
              $row->sendEmail            =    0;
                  
              $row->registerDate        =    date'Y-m-d H:i:s'$_CB_framework->now() );
                  
              $row->name            =    $fname ' ' $lname;
                  
              $row->firstname            =    $fname;
                  
              $row->lastname            =    $lname;
                  
              $row->username            =    $username;
                  
              $row->email            =    $email;
                  
              $row->password            =    cbHashPassword$password );
                  
              $row->registeripaddr        =    cbGetIPlist();
               
                  if ( 
              $approval == ) {
                      
              $row->approved        =    1;
                  } else {
                      
              $row->approved        =    0;
                  }
               
                  if ( 
              $confirmation == ) {
                      
              $row->confirmed        =    1;
                  } else {
                      
              $row->confirmed        =    0;
                  }
               
                  if ( ( 
              $row->confirmed == ) && ( $row->approved == ) ) {
                      
              $row->block        =    0;
                  } else {
                      
              $row->block        =    1;
                  }
               
                  if ( 
              $row->store() ) {
                      if ( ( 
              $row->confirmed == ) && ( $confirmation != ) ) {
                          
              $row->_setActivationCode();
               
                          if ( ! 
              $row->store() ) {
                              return 
              false;
                          }
                      }
               
                      return 
              true;
                  }
               
                  return 
              false;

              Et c'est là que ça ce corse pour moi :
              Quel type dois-je lui donner ? Début de soumission, fin de soumission ?
              J'imagine que après c'est dans l'onglet "Soumettre des pièces" de mon formulaire, dans la section début ou fin de soumission/librairie, que j'associerai la pièce cb_CreateCommunityBuilderUser précédemment créée.

              Une fois cela fait, comment j'assure le passage de mes variables cb_lastname, cb_fisrstname, cb_username, cb_password, cb_email à cette "pièce" ?
              J'avoue être franchement paumé sur la fin de cette affaire.

              Merci d'avance pour ton aide.

              Bodhi

              Commentaire


              • #8
                Re : Intégration de l'API Community Builder dans BreezingForms

                Dans ton cas, ça peut être en début de soumission, pour pourvoir retourner 'faux' en cas d'erreur (doublon de pseudo ou d email par exemple).
                Pas de demande de support par MP.
                S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                Commentaire


                • #9
                  Re : Intégration de l'API Community Builder dans BreezingForms

                  Une fois cela fait, comment j'assure le passage de mes variables cb_lastname, cb_fisrstname, cb_username, cb_password, cb_email à cette "pièce" ?
                  La pièce accède à toutes les variables du formulaire, donc ça ne pose strictement aucun problème.
                  Pas de demande de support par MP.
                  S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                  Commentaire


                  • #10
                    Re : Intégration de l'API Community Builder dans BreezingForms

                    Heu Jisse03 ... pardonne moi de jouer mon gros boulet mais il y a un truc qui m'échappe complètement.

                    Si je suis à la lettre ce que tu me dis, j'ai 2 pièces définies et attribuées de la manière suivante :
                    - cb_ImportCommunityBuilderAPI de type "Avant formulaire" et attribuée au niveau des propriétés du formulaire dans l'onglet "Pièces de formulaire" à la section "Avant formulaire/Librairie";

                    - cb_CreateCommunityBuilderUser de type "Début de soumission" et attribuée au niveau des propriétés du formulaire dans l'onglet "Soumettre des pièces" à la section "Début de soumission/Librairie";

                    Je n'arrive pas à comprendre ensuite par quelle magie BreezingForms arriverait à récupérer la valeur des champs de mon formulaire pour les passer à la fonction registerUser.

                    Il me manque un truc sérieux dans la compréhension de tout cela.

                    Peux tu m'éclairer là-dessus. Merci.

                    Bodhi

                    Commentaire


                    • #11
                      Re : Intégration de l'API Community Builder dans BreezingForms

                      Si les noms des paramètres passés à ta fonction pièce sont des noms de champs du formulaire, ils sont automatiquement passés en paramètres.
                      Pas de demande de support par MP.
                      S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                      Commentaire


                      • #12
                        Re : Intégration de l'API Community Builder dans BreezingForms

                        Désolé Jisse03, mais je ne comprends toujours pas

                        Mon problème est justement de savoir où j'appelle cette fonction pièce userRegister et comment je lui passe ces paramètres de valeurs de mes champs.

                        Peux-tu me donner un exemple de syntaxe d'appel de cette fonction avec les champs cb_lastname, cb_fisrstname, cb_username, cb_password et cb_email.

                        Commentaire


                        • #13
                          Re : Intégration de l'API Community Builder dans BreezingForms

                          Je ferai à temps perdu un tuto complet d'intégration Breezing/CB, puisque je me suis fait mon propre package d'intégration
                          Pas de demande de support par MP.
                          S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                          Commentaire


                          • #14
                            Re : Intégration de l'API Community Builder dans BreezingForms

                            Bonsoir Jisse03,
                            Je suis allé m'aérer en espérant revenir avec l'inspiration. Bof ....
                            Merci pour ta proposition de tuto d'intégration CB/BF. Je suis évidemment preneur mais malheureusement pour moi, j'ai comme qui dirait une urgence sur ce sujet et sans vouloir être lourdingue j'ai le sentiment de tutoyer la solution du bout des doigts. J'ai juste besoin des petites infos qui me permettraient de boucler ce foutu binz.

                            Pour décortiquer tout ce bazar j'ai essayé de simplifier le problème à outrance.
                            Je voudrais juste que tu me dises par étape si c'est OK ou non

                            Etape1
                            L'API (fondations + tous les cbimport) est une pièce de type "Avant formulaire" et est attribuée au niveau des propriétés du formulaire dans l'onglet "Pièces de formulaire" à la section "Avant formulaire/Librairie";

                            Bon ou pas ?

                            Etape2
                            La fonction registerUser est une pièce de type "Début de soumission" et est attribuée au niveau des propriétés du formulaire dans l'onglet "Soumettre des pièces" à la section "Début de soumission/Librairie";

                            Pour m'affranchir de passer les variables de mon formulaire dans un 1er temps, je décide de faire un test "en dur". Je veux donc exécuter la fonction registerUser en lui donnant à traiter des constantes. Pour ce faire en début de fonction, j'instancie les variables $fname, $lname, $email, $username, $password avec des chaines de caractères "en dur". Je modifie donc légèrement la fonction registerUser de la manière suivante :
                            Code PHP:
                            function registerUser$fname$lname$email$username$password$approve 0$confirm 0) {
                                global 
                            $_CB_framework$_CB_database$ueConfig;

                                
                            $fname='Prénom';
                                
                            $lname='NOM';
                                
                            $email='eat@joe.com';
                                
                            $username='MyID';
                                
                            $password='mypassword';

                                
                            $approval            =    ( $approve == $ueConfig['reg_admin_approval'] : $approve );
                                
                            $confirmation            =    ( $confirm == $ueConfig['reg_confirmation'] : $confirm );
                                
                            $usertype            =    $_CB_framework->getCfg'new_usertype' );

                                
                            $row                =    new moscomprofilerUser$_CB_database );
                            // (...)

                            Dans le cadre du test que je souhaite réaliser, bon ou pas ?

                            Etape 3
                            Enfin, je simplifie à outrance mon formulaire avec un simple bouton de validation/soumission.
                            Normalement et si j'ai tout compris, la validation de mon formulaire est sensée me créer sous CB l'utilisateur ayant le patronyme NOM Prénom, l'identifiant/mot de passe MyID/mypassword et l'email eat@joe.com.

                            Correct ou pas ?

                            Résultat de ce test
                            Or pour ce qui me concerne, rien ... pas d'erreur d'exécution apparente mais pas d'utilisateur créé non plus.
                            Pourquoi ?

                            Si déjà ce truc là ne marche pas je suis mal barré !?!?

                            Commentaire


                            • #15
                              Re : Intégration de l'API Community Builder dans BreezingForms

                              Jisse03,
                              Bon je pense tenir un truc intermédiaire qui marche ... j'arrive à créer un utilisateur avec tout ce bouzin ... mais vu l'heure indécente, je vais roupiller un peu et je reviens tout l'heure pour te présenter l'affaire et attendre tes remarques sur le choix d'implémentation fait.

                              Ceci dit je peux tout de suite te poser une question qui viendra de toute façon, cette fameuse fonction registerUser ne semble pas prendre en compte l'envoi automatique d'un email au nouvel utilisateur pour qu'il confirme son inscription en cliquant sur le lien d'activation. Comment intégrer ce workflow dans cette fonction ?

                              ZZzzzzz

                              Bodhi

                              Commentaire

                              Annonce

                              Réduire
                              1 sur 2 < >

                              C'est [Réglé] et on n'en parle plus ?

                              A quoi ça sert ?
                              La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

                              Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

                              Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
                              Comment ajouter la mention [Réglé] à votre discussion ?
                              1 - Aller sur votre discussion et éditer votre premier message :


                              2 - Cliquer sur la liste déroulante Préfixe.

                              3 - Choisir le préfixe [Réglé].


                              4 - Et voilà… votre discussion est désormais identifiée comme réglée.

                              2 sur 2 < >

                              Assistance au forum - Outil de publication d'infos de votre site

                              Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

                              Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

                              Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

                              UTILISER À VOS PROPRES RISQUES :
                              L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

                              Problèmes connus :
                              FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

                              Installation :

                              1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

                              Archive zip : https://github.com/AFUJ/FPA/zipball/master

                              2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

                              3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

                              4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

                              5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

                              6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
                              et remplacer www. votresite .com par votre nom de domaine


                              Exemples:
                              Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
                              Télécharger le script fpa-fr.php dans: /public_html/
                              Pour executer le script: http://www..com/fpa-fr.php

                              Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
                              Télécharger le script fpa-fr.php dans: /public_html/cms/
                              Pour executer le script: http://www..com/cms/fpa-fr.php

                              En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

                              Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
                              Voir plus
                              Voir moins
                              Travaille ...
                              X