Blog ou CMS à l'Xml
Vous n'êtes pas identifié.
@bg62
attention, tu a dû oublier d'insérer cette ligne dans la fonction addComment comme l'a écrit fightsoul le 05-08-2007 à 22:49:52 (bien au début) :
- Ajouter dans la fonction addComment du fichier class.pluxml.php après:
write($xml, $file);
$this->envoiMail($author, $date, $ip, $mail, $site, $message);
}
et ensuite tu place la nouvelle fonction de fightsoul (extrait suivant):
function envoiMail($author, $date, $ip, $mail, $site, $message) {
$provenance = $_SERVER['QUERY_STRING'];
ect, ect, (j'en passe et des pires) ...
mail($email,$sujet,$message,$headers);
}
en n'oubliant pas de bien refermer par le signe braket } ![]()
Hors ligne
voici ce que j'ai pour l'instant:
function addComment($file, $author, $date, $ip, $mail, $site, $message){
$data = implode("",file($file));
$end = '</comments>';
$add = "\t<comment>\n".
"\t\t<author><![CDATA[$author]]></author>\n".
"\t\t<date>$date</date>\n".
"\t\t<ip>$ip</ip>\n".
"\t\t<mail><![CDATA[$mail]]></mail>\n".
"\t\t<site><![CDATA[$site]]></site>\n".
"\t\t<content><![CDATA[$message]]></content>\n".
"\t</comment>\n";
$xml = str_replace($end, $add.$end, $data);
write($xml, $file);
//envoie d'un mail lors de l'ajout d'un commentaire donné sur le forum
$email='monmail@unesourisetmoi.info';
$sujet='Ajout de commentaire sur le site';
$message='
-------------------------------------------
IP : '.$ip.'
Nom : '.$author.'
E-mail : '.$mail.'
URL site :'.$site.'
Le contenu du message :'."\n".
html_entity_decode($message).'
-------------------------------------------';
$headers="From: $author \r\nReply-To: $mail";
mail($email,$sujet,$message,$headers);
}
peux tu me corriger cela ?
car là je m'y perds un peu ! (beaucoup même ...)
@mitiés
b g
Hors ligne
Salut, remplace ta fonction addComment par ce qu'il y a dans ce post http://forum.pluxml.org/viewtopic.php?pid=6102#p6102
Dernière modification par fightsoul (08-08-2007 15:49:16)
Hors ligne
fightsoul a écrit:
Salut, remplace ta fonction addComment par ce qu'il y a dans ce post http://forum.pluxml.org/viewtopic.php?pid=6102#p6102
hé ! attention ... je suis quasiment nul ... !
donc je mets ceci :
function addComment($file, $author, $date, $ip, $mail, $site, $message) {
$data = implode("",file($file));
$end = '</comments>';
$add = "\t<comment>\n".
"\t\t<author><![CDATA[$author]]></author>\n".
"\t\t<date>$date</date>\n".
"\t\t<ip>$ip</ip>\n".
"\t\t<mail><![CDATA[$mail]]></mail>\n".
"\t\t<site><![CDATA[$site]]></site>\n".
"\t\t<content><![CDATA[$message]]></content>\n".
"\t</comment>\n";
$xml = str_replace($end, $add.$end, $data);
write($xml, $file);
$this->envoiMail($author, $date, $ip, $mail, $site, $message);
}
// Supervision par mail lors de l'ajout d'un commentaire par Fightsoul
function envoiMail($author, $date, $ip, $mail, $site, $message) {
$provenance = $_SERVER['QUERY_STRING'];
$email = 'votremail@hebergeur.fr'; // Remplacer par votre mail
$sujet = $this->config['title'].' : Nouveau commentaire posté';
$message = "Un nouveau commentaire a été posté sur un de vos articles (".$this->config['racine']."?".$provenance.") :\n\n".
"-------------------------------------------\n".
"IP : ".$ip."\n".
"Nom ou pseudo : ".$author."\n".
"E-mail : ".$mail."\n".
"URL de votre site web :".$site."\n".
"Message :\n".
html_entity_decode($message)."\n".
"-------------------------------------------";
$headers = 'From: '.$author.' <'.$mail.'>';
$headers .= 'Reply-To: '.$mail;
mail($email,$sujet,$message,$headers);
}
à la place de ce que j'ai actuellement :
function addComment($file, $author, $date, $ip, $mail, $site, $message){
$data = implode("",file($file));
$end = '</comments>';
$add = "\t<comment>\n".
"\t\t<author><![CDATA[$author]]></author>\n".
"\t\t<date>$date</date>\n".
"\t\t<ip>$ip</ip>\n".
"\t\t<mail><![CDATA[$mail]]></mail>\n".
"\t\t<site><![CDATA[$site]]></site>\n".
"\t\t<content><![CDATA[$message]]></content>\n".
"\t</comment>\n";
$xml = str_replace($end, $add.$end, $data);
write($xml, $file);
//envoie d'un mail lors de l'ajout d'un commentaire donné sur le forum
$email='monmail@unesourisetmoi.info';
$sujet='Ajout de commentaire sur le site';
$message='
-------------------------------------------
IP : '.$ip.'
Nom : '.$author.'
E-mail : '.$mail.'
URL site :'.$site.'
Le contenu du message :'."\n".
html_entity_decode($message).'
-------------------------------------------';
$headers="From: $author \r\nReply-To: $mail";
mail($email,$sujet,$message,$headers);
}
c'est cela ? ou je suis encore à côté de la plaque ?
@mitiés
b g
Hors ligne
oula "dur dur bg62" ![]()
voila l'intégrale à partir de la fonction addComment "pour l"ajout de la ligne"
function addComment($file, $author, $date, $ip, $mail, $site, $message) {
$data = implode("",file($file));
$end = '</comments>';
$add = "\t<comment>\n".
"\t\t<author><![CDATA[$author]]></author>\n".
"\t\t<date>$date</date>\n".
"\t\t<ip>$ip</ip>\n".
"\t\t<mail><![CDATA[$mail]]></mail>\n".
"\t\t<site><![CDATA[$site]]></site>\n".
"\t\t<content><![CDATA[$message]]></content>\n".
"\t</comment>\n";
$xml = str_replace($end, $add.$end, $data);
write($xml, $file);
$this->envoiMail($author, $date, $ip, $mail, $site, $message); // Ajout ligne pour supervision par mail (part: 1/2)
}
// Fonction: Supervision par mail lors de l'ajout d'un commentaire par Fightsoul (part: 2/2)
function envoiMail($author, $date, $ip, $mail, $site, $message) {
$provenance = $_SERVER['QUERY_STRING'];
$email = 'monmail@unesourisetmoi.info'; // Remplacer par l'email qui héberge votre script
$sujet = $this->config['title'].' : Supervision de commentaire';
$message = "Un commentaire a été ajouté à l'article -> ".$this->config['racine']."?".$provenance."\n\n".
"-------------------------------------------\n".
"IP : ".$ip."\n".
"Nom ou pseudo : ".$author."\n".
"E-mail : ".$mail."\n".
"URL du site ".$site."\n".
"Message :\n\n".
html_entity_decode($message)."\n".
"-------------------------------------------";
$headers = 'From: '.$author.' <'.$mail.'>';
mail($email,$sujet,$message,$headers);
}et çà doit fonctionner puisque c'est bon pour fightsoul et moi ![]()
Dernière modification par Balou (08-08-2007 17:19:11)
Hors ligne
OUAIS !
grand merci cela fonctionne ...
et c'est vrai que c'est plus pratique pour trouver où est le commentaire
@mitiés
b g
Hors ligne
Bonjour à tous,
le sujet date un peu [edit= j'ai trouvé ce sujet via le moteur de recherche... pas vu qu'il avait été archivé] mais m'interesse énormément. Bien que la réponse donnée ici soit logique, je trouve tout de même bien pratique d'être averti par email qu'un commentaire a été posté.
Du coup, à toute fin utile, voici la solution que j'ai adopté sur une version 4.3.1, bien que j'aurais préféré ne pas modifier le 'moteur' de pluxml. Il s'agit du fichier core/lib/class.plx.motor.php (a éditer en utf-8)
j'ai remplacé la fonction addCommentaire par ceci (en fait, il y a l'ajout d'une fonction mailSupervision() suivi de addCommentaire légèrement modifiée avec deux lignes ajoutées):
Edit du 19/08/2010 = Correction du code.
Edit du 21/02/2010 = Erreur rencontrée : [Fatal error: Call to a member function f() on a non-object]
au moment de répondre à un commentaire, depuis l'admin.
La fonction f() qui m'a permis d'indiquer l'url de l'article concerné dans l'email, ne peut être utilisée depuis l'admin.
j'ai donc mis à jour le code suivant en ajoutant au niveau de addCommentaire, la détection de $type afin que l'email ne soit pas envoyé en cas de modification depuis l'admin ce qui résout le problème, évitant de plus un envoi de mail inutile puisque le webmaster n'a pas besoin d'être averti de sa propre réponse
/**
* Méthode qui envoie un email de supervision lorsqu'un commentaire est posté.
* Partie envoi mail inspirée de la page statique 'formulaire de contact' de florent@pluxml.org
* IMPORTANT = Renseigner la variable $eTo avec l'adresse destinataire
*
* @param article titre de l'article
* @param author auteur du commmentaire
* @param ip adresse IP posteuse du commmentaire
* @param mail mail de l'auteur du commmentaire
* @param site site de l'auteur du commmentaire
* @param content contenu du commmentaire
* L'email émis est au format html
* addCommentaire() est modifiée pour utiliser cette fonction
*
* Ludovic AMATHIEU - fevrier 2010
*/
function mailSupervision($article, $author, $ip, $mail, $site, $content) {
$eTo = "votre_adresse_email@votre_hebergeur.fr"; // <-- Adresse destinataire de l'email de supervision
$urlArticle = $this->racine.'?article'.intval($this->plxRecord_arts->f('numero')).'/'.$this->plxRecord_arts->f('url');
(empty($mail)) ? $eFrom = $eTo : $eFrom = $mail;
$article = str_replace("-"," ",$article);
$eSubject = 'Commentaire de '.$author.', article : '.$article;
$corps = 'Un commentaire concernant l\'article <b>"'.$article.'"</b> a été laissé par :'."<br /><br />";
$corps .= 'Son nom : <b>'.$author.'</b><br />';
$corps .= 'Son email : <a href="mailto:'.$mail.'">'.$mail.'</a><br />';
$corps .= 'Son site web : <a href="'.$site.'">'.$site.'</a><br />';
$corps .= 'Son adresse IP : '.$ip.'<br /><br />';
$corps .= '<u>Son commentaire :</u><br /><br />';
$corps .= $content.'<br /><br />';
$corps .= 'Pour consulter l\'article : <a href="'.$urlArticle.'">'.$urlArticle.'</a><br />';
# On retire certains caracteres
$corps = str_replace("\r"," ",$corps);
# On envoi le mail
$headers = 'From: '.$eFrom."\n";
$headers .= 'MIME-Version: 1.0'."\n";
$headers .= 'Content-type: text/html; charset="'.PLX_CHARSET.'"'."\n";
$headers .= 'Content-transfer-encoding: 8bit'."\n";
@mail($eTo ,$eSubject ,$corps, $headers);
}
/**
* Méthode qui crée physiquement le fichier XML du commentaire
*
* @param filename fichier du commentaire à créer
* @param author auteur du commmentaire
* @param type type du commmentaire (admin ou normal)
* @param ip adresse IP posteuse du commmentaire
* @param mail mail de l'auteur du commmentaire
* @param site site de l'auteur du commmentaire
* @param contenu contenu du commmentaire
* @return booléen
* @author Anthony GUÉRIN et Florent MONTHEL
*
* Modifiée pour ajouter une supervision par email - Ludovic AMATHIEU
**/
function addCommentaire($filename,$author,$type,$ip,$mail,$site,$contenu) {
# On genere le contenu de notre fichier XML
$xml = "<?xml version='1.0' encoding='".PLX_CHARSET."'?>\n";
$xml .= "<comment>\n";
$xml .= "\t<author><![CDATA[$author]]></author>\n";
$xml .= "\t<type>$type</type>\n";
$xml .= "\t<ip>$ip</ip>\n";
$xml .= "\t<mail><![CDATA[$mail]]></mail>\n";
$xml .= "\t<site><![CDATA[$site]]></site>\n";
$xml .= "\t<content><![CDATA[$contenu]]></content>\n";
$xml .= "</comment>\n";
# Pour l'email de supervision
$urlr = $_SERVER['REQUEST_URI'];
$masque = '/core\/admin/i';
if(!preg_match ($masque,$urlr)) {
$article = $this->plxRecord_arts->f('url');
$this->mailSupervision($article, $author, $ip, $mail, $site, $contenu); }
# On ecrit ce contenu dans notre fichier XML
return plxUtils::write($xml,$filename);
}IMPORTANT : Il faut remplacer votre_adresse_email@votre_hebergeur.fr dans la fonction mailSupervision par l'adresse email destinataire.
Il faut que l'hébergeur est validé l'utilisation de la fonction mail (pour info, chez Free, cela fonctionne. Il y a juste, je crois, une limitation du nombre d'emails par semaine).
L'email est au format html et est envoyé dès qu'un commentaire est posté sans erreur, qu'il soit sujet à validation préalable ou affiché directement.
Le message envoyé est structuré ainsi :
sujet : Commentaire de [Nom ou pseudo du visiteur], article : [titre de l'article]*
Corps du message :
Un commentaire concernant l'article "[titre de l'article]" a été laissé par :
Son nom : [nom ou pseudo du visiteur]
Son email : [email si renseigné]
Son site web : [site web si renseigné]
Son adresse IP : [adresse IP]
Son commentaire :
[Le texte du commentaire]
Pour consulter l'article : [url de l'article concerné]
*le titre de l'article est tiré de l'url de ce dernier (en remplaçant les - par des espaces)
C'est certainement perfectible (je ne suis pas 'programmeur') mais ça fonctionne bien sur un hébergement chez Free.
Cordialement,
Ludo
Dernière modification par Ludo_17 (19-08-2010 23:13:53)
Hors ligne
Bonjour,
les fils de syndication intégré a pluxml 4.3.1 (coté public ou admin) sont aussi bien utiles et si tu les suis
la notification par mail n'a plus vraiment d'utilité .
Cordialement
GC
Hors ligne
ben ça réveille de temps en temps quand on n'y pense pas ça fait pas de mal ... ![]()
Hors ligne
Bonjour GC,
gcyrillus-nomade a écrit:
Bonjour,
les fils de syndication intégré a pluxml 4.3.1 (coté public ou admin) sont aussi bien utiles et si tu les suisla notification par mail n'a plus vraiment d'utilité .
Cordialement
GC
Comme je l'ai écrit plus haut, je préfère la notification par mail, cela pour deux raisons:
La première, je n'utilise pas, d'une manière générale, les fils de syndication. Je n'ai donc pas ce réflexe avec pluxml, même si la possibilité existe.
La seconde, mon site perso (sous GuppY) m'averti par email lorsqu'une participation a lieu (forum, livre d'or, création d'un compte, inscription news letter etc...) et c'est un confort indéniable d'être averti quoi qu'il arrive (cela dit, c'est configurable et on peut choisir les services utilisant cette notification).
Comme ce sujet existait sur le forum, j'ai pris la liberté de proposer la solution que j'utilise au cas où cela intéresserait quelqu'un.
Bien cordialement,
Ludo
Hors ligne
Bonjour,
j'ai modifié le code un peu plus haut suite à une erreur constatée lors d'une réponse à un commentaire depuis l'admin.
A présent, l'email est émis seulement lorsque le commentaire est proposé par un visiteur.
Cordialement,
Ludo
Hors ligne
"A présent, l'email est émis seulement lorsque le commentaire est proposé par un visiteur."
ok vais voir ça au plus tôt ...
merci !
Hors ligne
Bonjour,
J'ai une belle erreur quand j'intègre cette fonction de Ludo_17 (je préfère moi aussi la notification).
Hors ligne
Bonjour zarer,
"J'ai une belle erreur"...
ma boule de cristal ne parvient pas à deviner laquelle... aille... (achetée sur ebay, alors...)
)
plus de détail ?
Cordialement,
Ludo
ps: attention, ce n'est pas prévu pour la V5 !
Dernière modification par Ludo_17 (16-08-2010 19:14:09)
Hors ligne
Ben... mille excuses ! deux fois ! 1°) pour ne pas avoir mis l'erreur. 2°) Parce que c'est la version 5.
Merci.
Hors ligne
Bonsoir,
...et pour zarer ![]()
pour que le code fonctionne en V5, il n'y a pas grand chose à modifier, juste 'public' à ajouter devant chaque 'function'.
Le voici donc pour pluxml V5, testé en local seulement mais il n'y a pas de raison que cela ne fonctionne pas en distant (rappel, code pour la V4 et description V4-V5 ) :
Code corrigé le 19/08/2010
/**
* Méthode qui envoie un email de supervision lorsqu'un commentaire est posté.
* Partie envoi mail inspirée de la page statique 'formulaire de contact' de florent@pluxml.org
* IMPORTANT = Renseigner la variable $eTo avec l'adresse destinataire
*
* @param article titre de l'article
* @param author auteur du commmentaire
* @param ip adresse IP posteuse du commmentaire
* @param mail mail de l'auteur du commmentaire
* @param site site de l'auteur du commmentaire
* @param content contenu du commmentaire
* L'email émis est au format html
* addCommentaire() est modifiée pour utiliser cette fonction
*
* Ludovic AMATHIEU - aout 2010
*/
public function mailSupervision($article, $author, $ip, $mail, $site, $content) {
$eTo = "votre_adresse_email@votre_hebergeur.fr"; // <-- Adresse destinataire de l'email de supervision
$urlArticle = $this->racine.'?article'.intval($this->plxRecord_arts->f('numero')).'/'.$this->plxRecord_arts->f('url');
(empty($mail)) ? $eFrom = $eTo : $eFrom = $mail;
$article = str_replace("-"," ",$article);
$eSubject = 'Commentaire de '.$author.', article : '.$article;
$corps = 'Un commentaire concernant l\'article <b>"'.$article.'"</b> a été laissé par :'."<br /><br />";
$corps .= 'Son nom : <b>'.$author.'</b><br />';
$corps .= 'Son email : <a href="mailto:'.$mail.'">'.$mail.'</a><br />';
$corps .= 'Son site web : <a href="'.$site.'">'.$site.'</a><br />';
$corps .= 'Son adresse IP : '.$ip.'<br /><br />';
$corps .= '<u>Son commentaire :</u><br /><br />';
$corps .= $content.'<br /><br />';
$corps .= 'Pour consulter l\'article : <a href="'.$urlArticle.'">'.$urlArticle.'</a><br />';
# On retire certains caracteres
$corps = str_replace("\r"," ",$corps);
# On envoi le mail
$headers = 'From: '.$eFrom."\n";
$headers .= 'MIME-Version: 1.0'."\n";
$headers .= 'Content-type: text/html; charset="'.PLX_CHARSET.'"'."\n";
$headers .= 'Content-transfer-encoding: 8bit'."\n";
@mail($eTo ,$eSubject ,$corps, $headers);
}
/**
* Méthode qui crée physiquement le fichier XML du commentaire
*
* @param filename fichier du commentaire à créer
* @param author auteur du commmentaire
* @param type type du commmentaire (admin ou normal)
* @param ip adresse IP posteuse du commmentaire
* @param mail mail de l'auteur du commmentaire
* @param site site de l'auteur du commmentaire
* @param contenu contenu du commmentaire
* @return booléen
* @author Anthony GUÉRIN et Florent MONTHEL
*
* Modifiée pour ajouter une supervision par email - Ludovic AMATHIEU
**/
public function addCommentaire($filename,$author,$type,$ip,$mail,$site,$contenu) {
# On genere le contenu de notre fichier XML
$xml = "<?xml version='1.0' encoding='".PLX_CHARSET."'?>\n";
$xml .= "<comment>\n";
$xml .= "\t<author><![CDATA[$author]]></author>\n";
$xml .= "\t<type>$type</type>\n";
$xml .= "\t<ip>$ip</ip>\n";
$xml .= "\t<mail><![CDATA[$mail]]></mail>\n";
$xml .= "\t<site><![CDATA[$site]]></site>\n";
$xml .= "\t<content><![CDATA[$contenu]]></content>\n";
$xml .= "</comment>\n";
# Pour l'email de supervision
$urlr = $_SERVER['REQUEST_URI'];
$masque = '/core\/admin/i';
if(!preg_match ($masque,$urlr)) {
$article = $this->plxRecord_arts->f('url');
$this->mailSupervision($article, $author, $ip, $mail, $site, $contenu); }
# On ecrit ce contenu dans notre fichier XML
return plxUtils::write($xml,$filename);
}En espérant que cela vous sera utile,
Cordialement,
Ludo ![]()
ps: pensez à remplacer "votre_adresse_email@votre_hebergeur.fr" par l'adresse email destinataire des messages de supervision.
Dernière modification par Ludo_17 (19-08-2010 23:13:20)
Hors ligne
bonjour
... et on met ça dans quelle page ?
Hors ligne
Dans core/lib/class.plx.motor.php ![]()
Hors ligne
Bonjour,
@bg62 : c'est au même endroit (core/lib/class.plx.motor.php), voir la description un peu plus haut, il n'y a rien de changé mis à part le code un peu différent, évidemment.
Cordialement,
Ludo
Hors ligne
Salut Ludo_17,
Tout d'abord merci pour la modif. Alors... J'ai ajouté le code à l'endroit indiqué. Lorsqu'un nouveau commentaire est ajouté, je reçois bien un mail, no problem. Par contre, j'ai voulu modifier mon propre commentaire dans l'espace d'administration et à la mise à jour...
Fatal error: Call to a member function f() on a non-object in /homepages/26/d240385239/htdocs/blook/core/lib/class.plx.motor.php on line 831
Et la ligne 831 :
$article = $this->plxRecord_arts->f('url');Heu... mon commentaire a disparu. J'ai écrit un nouveau commentaire, no problem, mais dès que je le modifie... même erreur et disparition dudit commentaire.
Dernière modification par zarer (19-08-2010 13:55:20)
Hors ligne
Bonjour zarer,
c'est curieux car je n'ai pas eu de soucis personnellement.
La fonction f() n'est pas accessible depuis l'admin d'où le message d'erreur. C'est pourquoi j'avais ajouté une condition :
if($type != 'admin') {évitant ainsi qu'un message soit envoyé lorsque l'action vient de l'admin (En plus, le webmaster n'a pas besoin d'être averti de ses propres commentaires ou modifications), je suis un peu étonné.
Cette fonction f() est utilisée pour récupérer l'url de l'article concerné afin de créer un lien direct dans le message envoyé.
Je re-ferai des essais ce soir, la variable $type peut peut-être contenir autre chose que 'admin' malgré tout lors d'une action depuis l'admin. Ce serait à mon avis la seule raison pour que l'email soit envoyé alors qu'il ne devrait pas ( et du coup, l'erreur).
A suivre ![]()
Cordialement,
Ludo
Hors ligne
En fait, quand je dis que j'ai écrit un commentaire, je l'ai fait de la même manière que le visiteur lambda. C'est que j'édite le commentaire que tout disparaît. Je n'ai pas essayé sur un commentaire de l'admin...
Hors ligne
En fait, quand je dis que j'ai écrit un commentaire, je l'ai fait de la même manière que le visiteur lambda. C'est que j'édite le commentaire que tout disparaît. Je n'ai pas essayé sur un commentaire de l'admin...
Mais quand tu édites le commentaire, tu le fais bien dans l'admin, non ?
bon, je vais bosser un peu, je verrai ça ce soir.
Bonne journée
,
Ludo
Hors ligne
Ludo_17 a écrit:
Mais quand tu édites le commentaire, tu le fais bien dans l'admin, non ?
Ludo
Oui oui...
Merci.
Hors ligne
Re bonjour zarer ![]()
Bon, c'est corrigé. Le code ci-dessus ne devrait donc plus provoquer de message d'erreur.
Je n'avais pas testé "à fond" et le soucis était bien dans le moyen choisi pour détecter la provenance de la demande. La variable $type contient bien 'admin' lors d'une publication de commentaire ou d'une réponse depuis l'admin. Mais elle contient 'normal' pour les autres actions ('mettre à jour', 'mettre hors ligne'...)
J'ai donc simplement récupéré l'url et testé la présence du terme 'admin'. L'email n'est envoyé qu'en absence de ce terme et ainsi, seulement dans le cas où un commentaire est publié par un visiteur.
Du coup, j'ai corrigé aussi le code concernant la V4.
merci zarer d'avoir soulevé le problème ![]()
Si tu peux me confirmer le fonctionnement en ligne.
Bonne soirée,
Ludo
ps: je confirme que le code corrigé pour la V4.3 fonctionne sans erreur, testé en ligne chez Free.
Dernière modification par Ludo_17 (20-08-2010 17:29:29)
Hors ligne