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.
Avant de commencer, assurez-vous d'avoir téléchargé le zip avec la nouvelle version.
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/
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.
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]');
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_ban'] = "alex_livre_ban";
$name_table['alex_livre_smileys'] = "alex_livre_smileys";
$name_table['alex_img_verif_add'] = "alex_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).
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.
Supprimez les fichiers /config/config.php et /config/test.
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.
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.
Remplacer :
<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 :
<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 :
<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 :
<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 :
<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 :
<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 :
<!-- 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 :
<!-- 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 :
<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 :
<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 :
<div class="d_center" style="clear: both;"><mx:text id="message_visiteur"/> *</div>
Par :
<div class="d_center" style="clear: both;"><mx:text id="message_visiteur"/> <mx:text id="symbole_champ_obligatoire"/></div>
Remplacer :
<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 :
<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 :
<!-- 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 :
<!-- 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>
Juste avant :
<?xml version="1.0" encoding="<mx:text id="SCRIPT_ENCODAGE"/>"?>
Rajouter :
<!--=== BLOC HEADER_HTML ===-->
Juste avant la balise </head>, ajouter :
<script language="javascript" type="text/javascript">
<!--
function donner_focus(champs){
document.getElementById(champs).focus();
}
//-->
</script>
Remplacer :
<body>
Par :
<body <mx:text id="donner_focus"/>>
<!--=== /BLOC HEADER_HTML ===-->
Remplacer :
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 :
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 :
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 :
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 :
<mx:text id="message_alert"/>
Ajouter :
<div id="alexguestbook">
<mx:text id="lien_accueil"/>
Remplacer :
</body>
</html>
Par :
<mx:text id="lien_admin"/>
</div>
<!--=== BLOC FOOTER_HTML ===-->
</body>
</html>
<!--=== /BLOC FOOTER_HTML ===-->
Remplacer :
<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 :
<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>
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 :
input, textarea, select {
font-family: Verdana, Helvetica, sans-serif;
font-size: 1em;
border: 1px solid #757575;
}
Devient :
#alexguestbook input, #alexguestbook textarea, #alexguestbook select {
font-family: Verdana, Helvetica, sans-serif;
font-size: 1em;
border: 1px solid #757575;
}
Ou encore :
input.btn_add {
font-size: 1em;
cursor: pointer;
font-weight: bold;
color: #373737;
}
Devient :
#alexguestbook input.btn_add {
font-size: 1em;
cursor: pointer;
font-weight: bold;
color: #373737;
}
Remplacer :
body {
background-color: #FFFFFF;
font-family: Verdana, Helvetica, sans-serif;
color: #000000;
font-size: 0.7em;
}
Par :
#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) :
#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;
}
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.