Forum Linux.général Hylafax et nom du destinataire.

Posté par  (site web personnel) .
Étiquettes : aucune
0
9
sept.
2005
Cher journal, je suis utilisateur d'Hylafax ( http://www.hylafax.org(...) ). Pour information c'est un serveur de fax, il vous permet d'envoyer à partir de n'importe où de votre réseau des fax à partir de client Linux (je connais pas le programme), Windows ( Whfc : http://www.uli-eckhardt.de/whfc/(...) ). Dans un précédent journal j'ai publié les modifications faites pour sauvegarder les fichiers pdf générés par Hylafax afin de les rendres consultables après envoie : https://linuxfr.org/~flipflip/17433.html(...) .

Bien sur se sont des modifications apportées dans le cadre d'une utilisation en entreprise. Le problème avec la pièce jointe envoyé par Hylafax est que le nom de fichier est composé uniquement du numéro de fax du destinataire, ce qui n'est pas très pratique pour faire des recherches. Donc il m'a été demandé de rendre plus lisible ce fameux nom de fichier. Petite information complémentaire, les clients sont tous en Windows et utilise Whfc avec l'option annuaire mysql activé. Donc le but était de modifier le fichier notify pour qu'il fasse une requête mysql afin de retrouver le nom du destinaire par rapport à sont numéro de fax.

Dans un premier temps j'ai modifié la première fonction (cpPdfFile() ) que j'avais écrite afin de gérer la copie du fichier, maintenant elle crée un fichier qui est de type : nomdestinataire_numfax_date_heure_mailemetteur_etat


  • nomdestinataire : nom récupérer dans la base mysql de whfc;

  • numfax : numéro de fax du destinataire;

  • date_heure : date et heure d'envoie du fax;

  • mailemetteur : email de l'emetteur;

  • etat : état d'envoie du fax, réussi / echec... .



Voila la fonction cpPdfFile() qui s'appelle maintenant cpFile() :
CpFile()
# Copie les fichiers dans un répertoire
{
VDATE=`date +%d-%m-%Y_%H-%M-%S`
VNUM="$number"
VMAIL="$mailaddr"
VUNDER="_"
VFAIL="echoue"
VDONE="reussi"
VBLOCK="bloque"
VREJECT="rejete"

# Controle de l'état d'envoi
if [ "$WHY" = "failed" ] ; then
if [ $RETURNFILETYPE = "tif" ] ; then
FIC="$DEST$VUNDER$VNUM$VUNDER$VDATE$VUNDER$VMAIL$VUNDER$VFAIL.tif"
cp "$OUTFILE" "backup/tif/$FIC" > $ERRORSTO 2>&1
elif [ $RETURNFILETYPE = "pdf" ] ; then
FIC="$DEST$VUNDER$VNUM$VUNDER$VDATE$VUNDER$VMAIL$VUNDER$VFAIL.pdf"
cp "$OUTFILE" "backup/pdf/$FIC" > $ERRORSTO 2>&1
elif [ $RETURNFILETYPE = "ps" ] ; then
FIC="$DEST$VUNDER$VNUM$VUNDER$VDATE$VUNDER$VMAIL$VUNDER$VFAIL.ps"
cp "$OUTFILE" "backup/ps/$FIC" > $ERRORSTO 2>&1
else
return
fi
elif [ "$WHY" = "rejected" ] ; then
if [ $RETURNFILETYPE = "tif" ] ; then
FIC="$DEST$VUNDER$VNUM$VUNDER$VDATE$VUNDER$VMAIL$VUNDER$VREJECT.tif"
cp "$OUTFILE" "backup/tif/$FIC" > $ERRORSTO 2>&1
elif [ $RETURNFILETYPE = "pdf" ] ; then
FIC="$DEST$VUNDER$VNUM$VUNDER$VDATE$VUNDER$VMAIL$VUNDER$VREJECT.pdf"
cp "$OUTFILE" "backup/pdf/$FIC" > $ERRORSTO 2>&1
elif [ $RETURNFILETYPE = "ps" ] ; then
FIC="$DEST$VUNDER$VNUM$VUNDER$VDATE$VUNDER$VMAIL$VUNDER$VREJECT.ps"
cp "$OUTFILE" "backup/ps/$FIC" > $ERRORSTO 2>&1
else
return
fi
elif [ "$WHY" = "done" ] ; then
if [ $RETURNFILETYPE = "tif" ] ; then
FIC="$DEST$VUNDER$VNUM$VUNDER$VDATE$VUNDER$VMAIL$VUNDER$VDONE.tif"
cp "$OUTFILE" "backup/tif/$FIC" > $ERRORSTO 2>&1
elif [ $RETURNFILETYPE = "pdf" ] ; then
FIC="$DEST$VUNDER$VNUM$VUNDER$VDATE$VUNDER$VMAIL$VUNDER$VDONE.pdf"
cp "$OUTFILE" "backup/pdf/$FIC" > $ERRORSTO 2>&1
elif [ $RETURNFILETYPE = "ps" ] ; then
FIC="$DEST$VUNDER$VNUM$VUNDER$VDATE$VUNDER$VMAIL$VUNDER$VDONE.ps"
cp "$OUTFILE" "backup/ps/$FIC" > $ERRORSTO 2>&1
else
return
fi
elif [ "$WHY" = "blocked" ] ; then
if [ $RETURNFILETYPE = "tif" ] ; then
FIC="$DEST$VUNDER$VNUM$VUNDER$VDATE$VUNDER$VMAIL$VUNDER$VBLOCK.tif"
cp "$OUTFILE" "backup/tif/$FIC" > $ERRORSTO 2>&1
elif [ $RETURNFILETYPE = "pdf" ] ; then
FIC="$DEST$VUNDER$VNUM$VUNDER$VDATE$VUNDER$VMAIL$VUNDER$VBLOCK.pdf"
cp "$OUTFILE" "backup/pdf/$FIC" > $ERRORSTO 2>&1
elif [ $RETURNFILETYPE = "ps" ] ; then
FIC="$DEST$VUNDER$VNUM$VUNDER$VDATE$VUNDER$VMAIL$VUNDER$VBLOCK.ps"
cp "$OUTFILE" "backup/ps/$FIC" > $ERRORSTO 2>&1
else
return
fi
else
if [ $RETURNFILETYPE = "tif" ] ; then
FIC="$DEST$VUNDER$VNUM$VUNDER$VDATE$VUNDER$VMAIL$VUNDER.tif"
cp "$OUTFILE" "backup/tif/$FIC" > $ERRORSTO 2>&1
elif [ $RETURNFILETYPE = "pdf" ] ; then
FIC="$DEST$VUNDER$VNUM$VUNDER$VDATE$VUNDER$VMAIL$VUNDER.pdf"
cp "$OUTFILE" "backup/pdf/$FIC" > $ERRORSTO 2>&1
elif [ $RETURNFILETYPE = "ps" ] ; then
FIC="$DEST$VUNDER$VNUM$VUNDER$VDATE$VUNDER$VMAIL$VUNDER.ps"
cp "$OUTFILE" "backup/ps/$FIC" > $ERRORSTO 2>&1
else
return
fi
fi
}


J'ai rajouté aussi l'activation par une variable de la copie du fichier.
BACKUPFILE=yes

Ensuite dans chaque fonction de copie de fichier (putPdfEncodedImage(), putPsEncodedImage(), putTifEncodedImage() ) j'ai rajouté :
if [ "$BACKUPFILE" = "yes" ] ; then
CpFile
return
fi


Ensuite le gros de la seconde modification. La fonction pour aller cherche le nom du destinataire dans la base mysql :

Dans un premier temps les variables pour gérer les paramètres de connexions :
DB_SERV=serveur mysql
DB_NAME=base de donnée
DB_USER=utilisateur
DB_PASS=mot de passe
DB_TABLE=table qui contient les numeros
DB_CHAMP_NOM=nom du champ qui contient les destinataires
DB_CHAMP_FAX=nom du champ qui contient les numéros de fax
BIN_MYSQL=chemin d'accès au client mysql


Maintenant la fonction en elle même :
NomDestinataire()
# Recuperation du nom du destinataire
# dans la base annuaire de Whfc
{
NUMFAX="$number"
RESULT=`$BIN_MYSQL/mysql --batch --silent --raw \
--host=$DB_SERV \
--user=$DB_USER \
--password=$DB_PASS \
--execute="SELECT $DB_CHAMP_NOM FROM $DB_TABLE WHERE $DB_CHAMP_FAX=$NUMFAX;" \
$DB_NAME \
| sed 's/[ ,?;.:/!§ù%*µ$£]//g'`

RESULT_NB=`echo $RESULT | sed 's/ /\n/g' | wc -l`
if [ "$RESULT_NB" -ne "1" ]
then
DEST=`echo $RESULT | cut -d ' ' -f1`
else
DEST=$RESULT
fi
}

Dans cette fonction la ligne
RESULT_NB=`echo $RESULT | sed 's/ /\n/g' | wc -l`
Me permet de compter le nombres résultat, si il y en a plusieurs je prend uniquement le premier.

Lorsque j'ai écris cette fonction je la lançais uniquement au moment de la copie du fichier donc avant la création du mail pour l'accusé récéption. En fait il faut la lancer au tout début du script, j'ai ajouté dans parseQfile()
parseQfile()
{
eval `($AWK -F: '
function p(varname,val)
{
...
END { p("nfiles", nfiles); p("npins", npins) } ' $QFILE )`

# Recuperation du nom du destinataire dans
# l'annuaire Whfc
NomDestinataire
}


Maintenant je peux récupérer la variable $DEST n'importe où dans le script, ce qui m'a permis de générer un nom de fichier et de pièce joint comme je l'entend.

Dans la fonction returnFaxImage() j'ai remplacé tout les :
ENCODEDFILENAME="$number-$i.tif"
Par
ENCODEDFILENAME="$DEST-$number-$i.tif"
Renouveller la même opération pour les extensions .ps, .pdf, original.

Dans la fonction putHeaders() modifié :
echo "Subject: $1"
Par
echo "Subject: Fax envoyé à $DEST au numéro $number"

Et
printf "Your $jobtype job to $number"
Par
printf "Votre Fax envoyé à $DEST $number"

Voila les modifications sont terminés, normalement vous allez recevoir des accusés réception avec de jolie nom de fichier et un jolie message de confirmation et en plus avec un jolie nom de fichier copié sur le serveur.

Comme pour la fois précédente, je n'arrive toujours pas à m'inscrire sur la ml donc si une personne est inscrite elle peut poster ces modifications.

P.S. : lors de prévisualisation du journal l'indentation à sauté, je ne sais pas si cela va être le cas après le post.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.