# Consignes de mise à jour du script AlexGuestbook
de la version 4.0.* à la version 5.0.2

Cette mise à jour apporte de nombreuses nouveautés, d'où le passage en version 5. C'est aussi pour nous une façon de marquer le changement de AlexPHPTeam vers AlexGuestbook.
La liste des modifications et corrections apportées au script est disponible dans le fichier changelog_fr.txt.
Retrouvez toutes les informations, les mises à jour et l'assistance du script sur www.alexguestbook.net

Avant toutes modifications, faites une sauvegarde de la base de données et de vos skins si vous les avez personnalisés.

Nous vous recommandons d'installer les skins fournis avec cette nouvelle version et de les modifier si besoin. La mise à jour d'un skin reste possible (seconde partie de cette page) mais est fortement déconseillée ! Les manipulations sont nombreuses, le risque d'erreurs est donc important.

1. Avant de commencer, assurez-vous d'avoir téléchargé le zip avec la nouvelle version.

2. Avec votre logiciel FTP, envoyez tous les fichiers sur votre serveur (remplacez les fichiers existants), à l'exception du fichier "setup.php", de ceux du dossier "config/" et ceux du dossier "templates/". Une exception toutefois pour ce dossier : copiez et remplacez également le dossier "templates/admin/

3. La structure des tables de la base a été modifiée. Avec votre logiciel d'administration de bases de données habituel (phpmyadmin par exemple), exécutez les requêtes ci-après.
   Attention, vos noms de tables sont peut-être différents, les noms utilisés ici sont les noms par défaut. Vous devrez également modifier les valeurs des options qui sont ici celles par défaut.

   Code: Tout sélectionner
     `RENAME TABLE `alex_livre_ip` TO `alex_livre_ban` ;
     ALTER TABLE `alex_livre_ban` CHANGE `id_ip` `id_ban` MEDIUMINT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT ;
     ALTER TABLE `alex_livre_ban` ADD `pseudo` VARCHAR( 40 ) NOT NULL , ADD `email` VARCHAR( 150 ) NOT NULL ;
     ALTER TABLE `alex_livre_users` CHANGE `gestion_ip` `gestion_bannissement` TINYINT( 1 ) NOT NULL DEFAULT '0';
     CREATE TABLE `alex_livre_config` (
     `nom_config` varchar(255) NOT NULL,
     `valeur_config` varchar(255),
     KEY `nom_config` (`nom_config`)
     ) Type=MyISAM;
     INSERT INTO `alex_livre_config` VALUES ('langue', 'francais');
     INSERT INTO `alex_livre_config` VALUES ('skin_to_use', 'AguestNew');
     INSERT INTO `alex_livre_config` VALUES ('temps_session', '1800');
     INSERT INTO `alex_livre_config` VALUES ('send_mail', '1');
     INSERT INTO `alex_livre_config` VALUES ('temps_ip_post', '60');
     INSERT INTO `alex_livre_config` VALUES ('format_date', 'd/m/Y');
     INSERT INTO `alex_livre_config` VALUES ('admin_valide_messages', '0');
     INSERT INTO `alex_livre_config` VALUES ('admin_envoyer_remerciement', '0');
     INSERT INTO `alex_livre_config` VALUES ('admin_add_code_securite', '0');
     INSERT INTO `alex_livre_config` VALUES ('admin_bannir_mot', '0');
     INSERT INTO `alex_livre_config` VALUES ('url_interdites', '1');
     INSERT INTO `alex_livre_config` VALUES ('url_cliquables', '0');
     INSERT INTO `alex_livre_config` VALUES ('color_txt_code', '#000000');
     INSERT INTO `alex_livre_config` VALUES ('color_background_code', '#FFFFFF');
     INSERT INTO `alex_livre_config` VALUES ('champ_pseudo', '0');
     INSERT INTO `alex_livre_config` VALUES ('champ_email', '0');
     INSERT INTO `alex_livre_config` VALUES ('champ_site', '0');
     INSERT INTO `alex_livre_config` VALUES ('champ_pays', '0');
     INSERT INTO `alex_livre_config` VALUES ('champ_note', '0');
     INSERT INTO `alex_livre_config` VALUES ('champ_ville', '0');
     INSERT INTO `alex_livre_config` VALUES ('ok_aff_moteur', '1');
     INSERT INTO `alex_livre_config` VALUES ('nb_pages', '10');
     INSERT INTO `alex_livre_config` VALUES ('cut_mots', '75');
     INSERT INTO `alex_livre_config` VALUES ('maxi_car', '1500');
     INSERT INTO `alex_livre_config` VALUES ('nb_max_smileys', '20');
     INSERT INTO `alex_livre_config` VALUES ('url_recharger', 'index.php');
     INSERT INTO `alex_livre_config` VALUES ('extension_url', '');
     INSERT INTO `alex_livre_config` VALUES ('decalage_horaire', '0');
     INSERT INTO `alex_livre_config` VALUES ('autoriser_smileys', '1');
     INSERT INTO `alex_livre_config` VALUES ('inclure_livre', '0');
     INSERT INTO `alex_livre_config` VALUES ('fichier_inclusion', '');
     INSERT INTO `alex_livre_config` VALUES ('donner_focus', '0');
     INSERT INTO `alex_livre_config` VALUES ('lien_admin', '1');
     INSERT INTO `alex_livre_config` VALUES ('lien_accueil', '1');
     INSERT INTO `alex_livre_config` VALUES ('chemin_lien_accueil', '/');
     INSERT INTO `alex_livre_config` VALUES ('symbole_champ_obligatoire', '*');
     INSERT INTO `alex_livre_config` VALUES ('symbole_champ_prive', '[P]');
     `

4. Récupérez le fichier "config/config_base.php" situé sur le serveur de votre hébergeur (copiez-le sur votre ordinateur avec votre logiciel FTP). Ouvrez-le avec un logiciel éditeur de texte. Le contenu du fichier devrait ressembler à ceci :

     `<?php
     $database_type = "MySQL";
     $f_mysql_host = "localhost";
     $f_mysql_user = "root";
     $f_mysql_pass = "****";
     $f_mysql_base = "guestbook";
     $name_table['alex_livre_sessions'] = "alex_livre_sessions";
     $name_table['alex_livre_users'] = "alex_livre_users";
     $name_table['alex_livre_messages'] = "alex_livre_messages";
     $name_table['alex_livre_censure'] = "alex_livre_censure";
     $name_table['alex_livre_ip'] = "alex_livre_ip";
     $name_table['alex_livre_ban'] = "alex_livre_ban";
     $name_table['alex_livre_smileys'] = "alex_livre_smileys";
     $name_table['alex_img_verif_add'] = "alex_livre_img_verif_add";
     $name_table['alex_livre_txt_lang'] = "alex_livre_txt_lang";
     $name_table['alex_livre_config'] = "alex_livre_config";
     ?>`

   Remplacez la ligne barrée par celle qui suit en rouge.
   Rajoutez aussi la deuxième ligne en rouge à la fin du fichier.

   Sauvez le fichier puis renvoyez-le à sa place sur le serveur. Vérifiez que l'ancien fichier a bien été remplacé (au besoin, effacez d'abord celui du serveur avant de transférer le nouveau).

5. Allez dans la partie admin du livre d'or, regardez les nouvelles options disponibles, paramétrez-les, puis cliquez sur le bouton enregistrer. Cette étape est indispensable si vous ne voulez pas rencontrer d'éléments anormaux par la suite.

6. Supprimez les fichiers /config/config.php et /config/test.

7. Si vous n'aviez pas personnalisé vos skins, vous pouvez intégralement copier/coller le dossier "/templates/skins/". Cette méthode est vivement recommandée (les modifications sont nombreuses !), de plus tous les skins sont maintenant valides xhtml.
   Si vous voulez conserver vos skins, vous devez les mettre à jour. Dans le cas contraire, pour vous la mise à jour est terminée.

## Liste des étapes de mise à jour du skin :

Nous rappelons qu'il est fortement conseillé de prendre un skin déjà à jour et de le personnaliser plutôt que de mettre à jour un skin personnalisé.

Avant de mettre à jour votre skin, celui-ci doit être en v4.0.5. Si ce n'est pas fait, voyez les étapes de mise à jour dans le fichier Instructions pour le passage de la version 4.0.4 à la version 4.0.5.

- add_message.htm

Remplacer :

Code: Tout sélectionner
  `<div class="add_msg_left"><mx:text id="nom_pseudo_visiteur"/> *</div>
  <div class="add_msg_right"><input class="i_text" type="text" tabindex="1" name="nom" size="34" maxlength="50" onfocus="this.className='i_focus'" onblur="this.className='i_text'"<mx:text id="value_nom"/> /></div>`

Par :

Code: Tout sélectionner
  `<mx:bloc id="bloc_pseudo">
  <div class="add_msg_left"><mx:text id="nom_pseudo_visiteur"/> <mx:text id="symbole_champ_obligatoire"/><mx:text id="symbole_champ_prive"/></div>
  <div class="add_msg_right"><input class="i_text" type="text" tabindex="1" name="nom" id="nom" size="34" maxlength="50" onfocus="this.className='i_focus'" onblur="this.className='i_text'"<mx:text id="value_nom"/> /></div>
  </mx:bloc id="bloc_pseudo">`

Remplacer :

Code: Tout sélectionner
  `<div class="add_msg_left"><mx:text id="email_visiteur"/></div>
  <div class="add_msg_right"><input class="i_text" type="text" tabindex="2" name="email" size="34" maxlength="150" onfocus="this.className='i_focus'" onblur="this.className='i_text'"<mx:text id="value_email"/> /></div>`

Par :

Code: Tout sélectionner
  `<div class="add_msg_left"><mx:text id="email_visiteur"/> <mx:text id="symbole_champ_obligatoire"/><mx:text id="symbole_champ_prive"/></div>
  <div class="add_msg_right"><input class="i_text" type="text" tabindex="2" name="email" id="email" size="34" maxlength="150" onfocus="this.className='i_focus'" onblur="this.className='i_text'"<mx:text id="value_email"/> /></div>`

Remplacer :

Code: Tout sélectionner
  `<div class="add_msg_left"><mx:text id="site_web_visiteur"/></div>
  <div class="add_msg_right"><input class="i_text" type="text" tabindex="3" name="site" size="34" maxlength="150" onfocus="this.className='i_focus'" onblur="this.className='i_text'"<mx:text id="value_site"/> /></div>`

Par :

Code: Tout sélectionner
  `<div class="add_msg_left"><mx:text id="site_web_visiteur"/> <mx:text id="symbole_champ_obligatoire"/><mx:text id="symbole_champ_prive"/></div>
  <div class="add_msg_right"><input class="i_text" type="text" tabindex="3" name="site" id="site" size="34" maxlength="150" onfocus="this.className='i_focus'" onblur="this.className='i_text'"<mx:text id="value_site"/> /></div>`

Remplacer :

Code: Tout sélectionner
  `<!-- city & country -->
  <mx:bloc id="bloc_pays">
  <div class="add_msg_left"><mx:text id="ville_visiteur"/></div>
  <div class="add_msg_right"><input class="i_text" type="text" tabindex="4" name="ville" size="34" maxlength="60" onfocus="this.className='i_focus'" onblur="this.className='i_text'"<mx:text id="value_ville"/> /></div>
  <div class="add_msg_left"><mx:text id="pays_visiteur"/></div>
  <div class="add_msg_right"><select tabindex="5" size="1" name="pays" onchange="update_flag(this)"><option value="">-</option><mx:text id="select_pays"/></select> <img id="img_flags" src="<mx:text id="chem_absolu"/>images/<mx:text id="img_flags"/>" width="18" height="12" alt="" title="<mx:text id="flag"/>" /></div>
  </mx:bloc id="bloc_pays">
  `

Par :

Code: Tout sélectionner
  `<!-- city -->
  <mx:bloc id="bloc_ville">
  <div class="add_msg_left"><mx:text id="ville_visiteur"/> <mx:text id="symbole_champ_obligatoire"/><mx:text id="symbole_champ_prive"/></div>
  <div class="add_msg_right"><input class="i_text" type="text" tabindex="4" name="ville" id="ville" size="34" maxlength="60" onfocus="this.className='i_focus'" onblur="this.className='i_text'"<mx:text id="value_ville"/> /></div>
  </mx:bloc id="bloc_ville">
  <!-- country -->
  <mx:bloc id="bloc_pays">
  <div class="add_msg_left"><mx:text id="pays_visiteur"/> <mx:text id="symbole_champ_obligatoire"/><mx:text id="symbole_champ_prive"/></div>
  <div class="add_msg_right"><select tabindex="5" size="1" name="pays" id="pays" onchange="update_flag(this)"><option value="">-</option><mx:text id="select_pays"/></select> <img id="img_flags" src="<mx:text id="chem_absolu"/>images/<mx:text id="img_flags"/>" width="18" height="12" alt="" title="<mx:text id="flag"/>" /></div>
  </mx:bloc id="bloc_pays">`

Remplacer :

Code: Tout sélectionner
  `<div class="add_msg_left"><mx:text id="note_visiteur"/></div>
  <div class="add_msg_right"><select tabindex="6" size="1" name="note_site">`

Par :

Code: Tout sélectionner
  `<div class="add_msg_left"><mx:text id="note_visiteur"/> <mx:text id="symbole_champ_obligatoire"/><mx:text id="symbole_champ_prive"/></div>
  <div class="add_msg_right"><select tabindex="6" size="1" name="note_site" id="note_site">`

Remplacer :

Code: Tout sélectionner
  `<div class="d_center" style="clear: both;"><mx:text id="message_visiteur"/> *</div>`

Par :

Code: Tout sélectionner
  `<div class="d_center" style="clear: both;"><mx:text id="message_visiteur"/> <mx:text id="symbole_champ_obligatoire"/></div>`

Remplacer :

Code: Tout sélectionner
  `<mx:bloc id="bloc_code_securite">
  <div class="d_center"><br /><mx:text id="veuillez_taper_code"/> : (<a href="javascript:script_popup('<mx:text id="chem_absolu"/>infos_code.php?lang=<mx:text id="lang"/>','down',350,280,'scrollbars=yes')" class="a_info_code"><mx:text id="a_quoi_ca_sert"/></a>)<br />
  <div>
  <div class="d_code1"><img width="82" height="20" src="<mx:text id="chem_absolu"/>genImg/index.php?id=<mx:text id="id_genImg"/>" alt="" title="Code" /></div>
  <div class="d_code2"><input tabindex="8" class="code_sec" maxlength="4" type="text" name="code_securite" size="5" /></div>
  <input type="hidden" name="num_id" value="<mx:text id="id_genImg"/>" />
  </div></div>
  </mx:bloc id="bloc_code_securite">`

Par :

Code: Tout sélectionner
  `<mx:bloc id="bloc_code_securite">
  <div class="d_center"><br /><mx:text id="veuillez_taper_code"/> : (<a href="javascript:script_popup('<mx:text id="chem_absolu"/>infos_code.php?lang=<mx:text id="lang"/>','down',350,280,'scrollbars=yes')" class="a_info_code"><mx:text id="a_quoi_ca_sert"/></a>)<br />
  <div>
  <div class="d_code1"><img width="82" height="20" src="<mx:text id="chem_absolu"/>genImg/index.php?id=<mx:text id="id_genImg"/>" alt="" title="Code" /></div>
  <div class="d_code2"><input tabindex="8" class="code_sec" maxlength="4" type="text" name="code_securite" size="5" /></div>
  </div></div>
  </mx:bloc id="bloc_code_securite">
  <input type="hidden" name="num_id" id="num_id" value="<mx:text id="id_genImg"/>" />`

Remplacer :

Code: Tout sélectionner
  `<!-- submit -->
  <div class="d_submit_msg"><br /><input type="submit" tabindex="9" value="<mx:text id="ajouter_message_visiteur"/>" name="ajouter" class="btn_add" /></div>`

Par :

Code: Tout sélectionner
  `<!-- submit -->
  <div class="d_submit_msg"><br /><input type="submit" tabindex="9" value="<mx:text id="ajouter_message_visiteur"/>" name="ajouter" id="ajouter" class="btn_add" /></div>`

- assembly.htm

Juste avant :

Code: Tout sélectionner
  `<?xml version="1.0" encoding="<mx:text id="SCRIPT_ENCODAGE"/>"?>`

Rajouter :

Code: Tout sélectionner
  `<!--=== BLOC HEADER_HTML ===-->`

Juste avant la balise </head>, ajouter :

Code: Tout sélectionner
  `<script language="javascript" type="text/javascript">
  <!--
  function donner_focus(champs){
  document.getElementById(champs).focus();
  }
  //-->
  </script>`

Remplacer :

Code: Tout sélectionner
  `<body>`

Par :

Code: Tout sélectionner
  `<body <mx:text id="donner_focus"/>>
  <!--=== /BLOC HEADER_HTML ===-->`

Remplacer :

Code: Tout sélectionner
  `function verif_mail(adresse) {
  var place = adresse.indexOf("@",1);
  var point = adresse.indexOf(".",place+1);
  if ((place > -1)&&(adresse.length >2)&&(point > 1))
  return true;
  else
  return false;
  }`

Par :

Code: Tout sélectionner
  `function verif_mail(adresse){
  if (adresse.match(/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i))
  return true;
  else
  return false;
  }
  function verif_url(adresse){
  if (adresse.match(/^(?:(?:https?)\:\/\/)?\w+([\.\-]\w+)*\.\w{2,4}(\:\d+)*([\/\.\-\?\&\%\#]\w+)*\/?$/i))
  return true;
  else
  return false;
  }`

Remplacer :

Code: Tout sélectionner
  `function verif_add(){
  var F = document.getElementById("form_add_guest");
  var nom = F.nom.value;
  var message = F.message_textarea.value;
  <mx:bloc id="bloc_verif_mail">
  var mail= F.email.value;
  </mx:bloc id="bloc_verif_mail">
  if (!nom){
  alert("<mx:text id="erreur_add_nom"/> ");
  return false;
  }
  else if (!message){
  alert("<mx:text id="erreur_add_message"/> ");
  return false;
  }
  <mx:bloc id="bloc_verif_mail2">
  else if (!verif_mail(mail) && mail){
  alert("<mx:text id="erreur_mail"/> ");
  return false;
  }
  </mx:bloc id="bloc_verif_mail2">
  else if (F.code_securite && !F.code_securite.value){
  alert("<mx:text id="erreur_code_securite"/>");
  return false;
  }`

Par :

Code: Tout sélectionner
  `function verif_add(){
  var F = document.getElementById("form_add_guest");
  var message = F.message_textarea.value;
  <mx:bloc id="bloc_verif_nom">
  var nom = F.nom.value;
  if (!nom){
  alert("<mx:text id="erreur_add_nom"/> ");
  return false;
  }
  </mx:bloc id="bloc_verif_nom">
  <mx:bloc id="bloc_verif_email">
  var email = F.email.value;
  if (!email){
  alert("<mx:text id="erreur_add_email"/> ");
  return false;
  }
  </mx:bloc id="bloc_verif_email">
  <mx:bloc id="bloc_verif_site">
  var site = F.site.value;
  if (!site){
  alert("<mx:text id="erreur_add_site"/> ");
  return false;
  }
  </mx:bloc id="bloc_verif_site">
  <mx:bloc id="bloc_verif_ville">
  var ville = F.ville.value;
  if (!ville){
  alert("<mx:text id="erreur_add_ville"/> ");
  return false;
  }
  </mx:bloc id="bloc_verif_ville">
  <mx:bloc id="bloc_verif_pays">
  var pays = F.pays.value;
  if (!pays){
  alert("<mx:text id="erreur_add_pays"/> ");
  return false;
  }
  </mx:bloc id="bloc_verif_pays">
  <mx:bloc id="bloc_verif_note">
  var note = F.note_site.value;
  if (!note){
  alert("<mx:text id="erreur_add_note"/> ");
  return false;
  }
  </mx:bloc id="bloc_verif_note">
  if (!message){
  alert("<mx:text id="erreur_add_message"/> ");
  return false;
  }
  <mx:bloc id="bloc_verif_email2">
  var email = F.email.value;
  if (!verif_mail(email) && email){
  alert("<mx:text id="erreur_mail"/> ");
  return false;
  }
  </mx:bloc id="bloc_verif_email2">
  <mx:bloc id="bloc_verif_site2">
  var site = F.site.value;
  if (!verif_url(site) && site){
  alert("<mx:text id="erreur_url"/> ");
  return false;
  }
  </mx:bloc id="bloc_verif_site2">
  else if (F.code_securite && !F.code_securite.value){
  alert("<mx:text id="erreur_code_securite"/>");
  return false;
  }
  }`

Juste avant :

Code: Tout sélectionner
  `<mx:text id="message_alert"/>`

Ajouter :

Code: Tout sélectionner
  `<div id="alexguestbook">
  <mx:text id="lien_accueil"/>`

Remplacer :

Code: Tout sélectionner
  `</body>
  </html>`

Par :

Code: Tout sélectionner
  `<mx:text id="lien_admin"/>
  </div>
  <!--=== BLOC FOOTER_HTML ===-->
  </body>
  </html>
  <!--=== /BLOC FOOTER_HTML ===-->`

- corps_messages.htm

Remplacer :

Code: Tout sélectionner
  `<div class="d_pseudo"><a name="id<mx:text id="idMsg"/>"><mx:text id="flag"/> <mx:text id="pseudo"/> <mx:text id="pays_ville"/> <mx:text id="img_home"/> <mx:text id="img_mail"/></a></div>`

Par :

Code: Tout sélectionner
  `<div class="d_pseudo"><a name="id<mx:text id="idMsg"/>"><mx:text id="flag"/> <mx:text id="pseudo"/> <mx:text id="ville"/><mx:text id="pays"/> <mx:text id="img_home"/> <mx:text id="img_mail"/></a></div>`

- alex_livre.css

Pour éviter que les styles du livre n'interfèrent avec le reste du site, le livre est désormais placé dans un calque conteneur (balise DIV). Vous devez donc rajouter le préfixe #alexguestbook (qui est l'ID du conteneur) devant le nom de chaque style.

Par exemple :

Code: Tout sélectionner
  `input, textarea, select {
  font-family: Verdana, Helvetica, sans-serif;
  font-size: 1em;
  border: 1px solid #757575;
  }`

Devient :

Code: Tout sélectionner
  `#alexguestbook input, #alexguestbook textarea, #alexguestbook select {
  font-family: Verdana, Helvetica, sans-serif;
  font-size: 1em;
  border: 1px solid #757575;
  }`

Ou encore :

Code: Tout sélectionner
  `input.btn_add {
  font-size: 1em;
  cursor: pointer;
  font-weight: bold;
  color: #373737;
  }`

Devient :

Code: Tout sélectionner
  `#alexguestbook input.btn_add {
  font-size: 1em;
  cursor: pointer;
  font-weight: bold;
  color: #373737;
  }`

Le style appliqué à la balise BODY est maintenant appliqué au conteneur #alexguestbook.

Remplacer :

Code: Tout sélectionner
  `body {
  background-color: #FFFFFF;
  font-family: Verdana, Helvetica, sans-serif;
  color: #000000;
  font-size: 0.7em;
  }`

Par :

Code: Tout sélectionner
  `#alexguestbook {
  background-color: #FFFFFF;
  font-family: Verdana, Helvetica, sans-serif;
  color: #000000;
  font-size: 0.7em;
  }`

Pour finir sur ce fichier, ajouter (par exemple à la fin du fichier) :

Code: Tout sélectionner
  `#alexguestbook #lien_accueil a:link, #alexguestbook #lien_accueil a:hover, #alexguestbook #lien_accueil a:visited, #alexguestbook #lien_administration a:link, #alexguestbook #lien_administration a:hover, #alexguestbook #lien_administration a:visited {
  text-decoration: underline;
  color: #4A7DAC;
  }
  #alexguestbook #lien_accueil img, #alexguestbook #lien_administration img {
  vertical-align: text-bottom;
  width: 16px;
  height: 16px;
  border: 0;
  margin: 0 2px 0 0;
  }
  #alexguestbook #lien_administration {
  text-align: center;
  margin-top: 10px;
  }
  #alexguestbook .symbole_champ_obligatoire {
  color: #FF0000;
  }
  #alexguestbook .symbole_champ_prive {
  color: #0000FF;
  }`

- Ajout des nouvelles images

Ouvrez le fichier ZIP de la nouvelle version du script, puis copiez les images "templates/skins/AguestNew/img/administration.png" et "templates/skins/AguestNew/img/accueil.png". Créez un dossier "img" dans le dossier de votre skin et collez les images précédemment copiées.

## C'est terminé, votre script est mis à jour :o)