#!/usr/bin/perl ################################################################### ## Script ecrit par : Berger Christophe ## ## Modifier par : Sesko Yves le 24/04/2001 ## ## Copyright Berger Christophe ## ## Script soumis a la licence GNU ## ################################################################### ## Version: 2.2 - Derniere modification: 10 juin 2001 ## ################################################################### require 'cgi-lib.cgi'; require "annonces.cfg"; &ReadParse; &print_form if ($ENV{'QUERY_STRING'} eq 'ajout'); &print_form_modif if ($ENV{'QUERY_STRING'} eq 'modif'); &execmodif if ($in{action} eq 'modifier'); &modif if ($in{action} eq 'entrermodif'); &ajout if ($in{action} eq 'ajouter'); &annonces if ($in{rub}); &exec_search if ($in{execsearch}); &details if ($in{ann}); &rubriques; sub rubriques {open(BASE,"$config{dossierlogs}/base.txt"); if ($config{flock}) {flock BASE, 2;} @BASE=; close(BASE); $nombre=@BASE; &print_header; print qq~
[ Retour ][ Ajouter une annonce ][ Modifier une annonce ]



Catégories disponibles:

Nombre d'annonces total: $nombre

~; foreach $mot (@rubriques) {@resul=; foreach $ligne (@BASE) {($numero,$date,$code,$rubrique,$titre,$nom,$email,$dep,$url,$photo,$annonce)=split(/\|\|/,$ligne); if ($rubrique eq $mot) {push(@resul,$ligne);}} $qtt=@resul; close(resul); if ($mot ne '') {$lien=$mot; $lien=~s/ //g; print qq~~;}} print qq~
$mot$qtt


~; &formsearch; &print_footer; exit;} sub annonces { &print_header; open(BASE,"$config{dossierlogs}/base.txt"); if ($config{flock}) {flock BASE, 2;} @BASE=; close(BASE); foreach $ligne (@BASE) { ($numero,$date,$code,$rubrique,$titre,$nom,$email,$dep,$url,$photo,$annonce)=split(/\|\|/,$ligne); $rubrique=~s/ //g; if ($rubrique=~/\b$in{rub}/) {push(@resultats,$ligne);}} $nombre=@resultats; print qq~~; if (!$nombre) {print qq~~;} else {$i=1; $debut=0; if ($in{debut}) {$debut=$in{debut};} $fin=$debut+$config{affparpage}; if ($fin > $nombre) {$fin=$nombre;} ($numero,$date,$code,$activerub,$titre,$nom,$email,$dep,$url,$photo,$annonce)=split(/\|\|/,$resultats[0]); print qq~~; if ($config{affliste}) {print qq~~; for ($s=$debut; $s < $fin; $s++) {($numero,$date,$code,$rubrique,$titre,$nom,$email,$dep,$url,$photo,$annonce)=split(/\|\|/,$resultats[$s]); if ($i eq '1') {$couleur=$config{col2};$i=2;} else {$couleur=$config{col1};$i='1';} print qq~~;}} else {print qq~~;}} if (($debut ne '0')&&($debut)) {$prec=$debut-$config{affparpage}; $lienprecedent=qq|[ Réponses précédentes ]|;} if ($nombre>$fin) {$suiv=$fin; $liensuite=qq|[ Réponses suivantes ]|;} print qq~
[ Retour ][ Ajouter une annonce ][ Modifier une annonce ]





Il n'y a pas d'annonces dans cette catégorie




Affichage des annonces

$nombre annonces dans '$activerub'
visualisation de $debut à $fin


Département
(date)
Titre de l'annonce
$dep
(le $date)
$titre
~; for ($s=$debut; $s < $fin; $s++) {($numero,$date,$code,$rubrique,$titre,$nom,$email,$dep,$url,$photo,$annonce)=split(/\|\|/,$resultats[$s]); print qq~

De: $nom, le $date
~; if ($url) {print qq~Site web: $url~;} if ($photo) {print qq~
$numero$annonce
~;} else {print qq~
$annonce~;}} print qq~
$lienprecedent $liensuite


~; &formsearch; &print_footer; exit;} sub details { open(BASE,"$config{dossierlogs}/base.txt"); if ($config{flock}) {flock BASE, 2;} @BASE=; close(BASE); foreach $ligne (@BASE) {($numero,$date,$code,$rubrique,$titre,$nom,$email,$dep,$url,$photo,$annonce)=split(/\|\|/,$ligne); if ($numero eq $in{ann}){&print_header; print qq~
[ Index ][ Ajouter une annonce ][ Modifier une annonce ]



Détails de cette annonce:


De: $nom, le $date
~; if ($url) {print qq~Site web: $url~;} print qq~

Département/Pays: $dep

~; if ($photo) {print qq~
$numero$annonce
mail : $email
~;} else {print qq~
$annonce
mail : $email~;} print qq~


~; &print_footer; exit;}} &erreur("L'annonce numero $numero n'a pas été trouvée"); exit;} sub formsearch {print qq~

Mots clé:
Mode de recherche: ET    OU
~;} sub exec_search { open(BASE,"$config{dossierlogs}/base.txt"); if ($config{flock}) {flock BASE, 2;} @BASE=; close(BASE); if ($in{motcle} eq '') {&erreur("Vous n'avez pas entré de mots clé");} $achercher=lc($in{motcle}); $achercher=~ s/\+/ /g; ($d1,$d2,$d3,$d4,$d5)=split(/ /,$achercher); &print_header; foreach $ligne (@BASE){ $lignetemp=lc($ligne); ($numero,$date,$code,$rubrique,$titre,$nom,$email,$dep,$url,$photo,$annonce)=split(/\|\|/,$lignetemp); $ou_chercher="$titre $dep $annonce"; if ($in{mode} eq 'ET') {if ($ou_chercher=~/\b$d1/ && $ou_chercher=~/\b$d2/ && $ou_chercher=~/\b$d3/ && $ou_chercher=~/\b$d4/ && $ou_chercher=~/\b$d5/) {push(@reponses,"$ligne");}} elsif ($in{mode} eq 'OU') {if ((($ou_chercher=~$d1)&&($d1)) || (($ou_chercher=~$d2)&&($d2)) || (($ou_chercher=~$d3)&&($d3)) || (($ou_chercher=~$d4)&&($d4)) || (($ou_chercher=~$d5)&&($d5))){push(@reponses,"$ligne");}} else {if ((($ou_chercher=~$d1)&&($d1)) || (($ou_chercher=~$d2)&&($d2)) || (($ou_chercher=~$d3)&&($d3)) || (($ou_chercher=~$d4)&&($d4)) || (($ou_chercher=~$d5)&&($d5))){push(@reponses,"$ligne");}}} $nombre=@reponses; print qq~~; if (!$nombre) {print qq~~;} else {$i=1; $debut=0; if ($in{debut}) {$debut=$in{debut};} $fin=$debut+$config{affparpage}; if ($fin > $nombre) {$fin=$nombre;} print qq~~; if ($config{affliste}) {print qq~~; for ($s=$debut; $s < $fin; $s++) {($numero,$date,$code,$rubrique,$titre,$nom,$email,$dep,$url,$photo,$annonce)=split(/\|\|/,$reponses[$s]); if ($i eq '1') {$couleur=$config{col2};$i=2;} else {$couleur=$config{col1};$i='1';} print qq~~;}} else {print qq~~;}} $in{motcle}=~s/ /\+/g; if (($debut ne '0')&&($debut)) {$prec=$debut-$config{affparpage}; $lienprecedent=qq|[ Réponses précédentes ]|;} if ($nombre>$fin) {$suiv=$fin; $liensuite=qq|[ Réponses suivantes]|;} print qq~
[ Retour ][ Ajouter une annonce ][ Modifier une annonce ]





aucune annonce ne correspond à vos critères de recherche.






Affichage des annonces

$nombre annonces correspondent à votre recherche
visualisation de $debut à $fin


Département
(date)
Titre de l'annonce
$dep
(le $date)
$titre
~; for ($s=$debut; $s < $fin; $s++) {($numero,$date,$code,$rubrique,$titre,$nom,$email,$dep,$url,$photo,$annonce)=split(/\|\|/,$reponses[$s]); print qq~

De: $nom, le $date
~; if ($url) {print qq~Site web: $url~;} if ($photo) {print qq~
$numero$annonce
~;} else {print qq~
$annonce~;}} print qq~
$lienprecedent $liensuite


~; &formsearch; &print_footer; exit;} sub print_form { &print_header; print qq~

Ajout d'une annonce:


~; if ($config{affliste}) {print qq~~;} print qq~~; if ($config{ajoutphoto}) {print qq~~;} print qq~
Nom ou pseudo:(obligatoire)
Votre Adresse E-Mail:(obligatoire)
URL:
Departement, Pays:
Votre code:(obligatoire)
Votre annonce:
Titre:(obligatoire)
Rubrique:
Photo:
Texte de l'annonce:
     


~; &print_footer; exit;} sub ajout { if ((!$in{rubrique})||(!$in{nom})||(!$in{dep})||(!$in{code})||(!$in{annonce})||(!($in{email}=~ /\w+@\w+.\w+/))||(($config{affliste})&&(!$in{titre}))) { if ($config{affliste}) {$titre=qq|Le titre de votre annonce|;} if ($config{ajoutphoto}) {$photo=qq|Votre photo|;} foreach $mot (@rubriques) {if ($mot ne '') {$rubriques.=qq||;}} &erreur("

Vous n'avez pas rempli tous les champs obligatoires:

$titre $photo
Votre nom
Votre email
Votre URL
Votre département
Votre code
La rubrique
Votre annonce
");} $redirection="$ENV{'SCRIPT_NAME'}?rub=$in{rubrique}"; $redirection=~s/\ //g; $in{annonce}=~s/\015?\012/
/g; if (($in{url} eq 'http://') || ($in{url} eq '')) {$in{url}='';} open(LOG,"$config{dossierlogs}/anns.log"); $verif_annonce=; close(LOG); $verif_annonce=~s/\n//g; if ($verif_annonce eq $in{annonce}){print "Content-type: text/html\nLocation: $redirection\n\n";exit;} &date; if ($in{photo}) {if (!$incfn{photo}) {&erreur("Votre navigateur semble ne pas supporter l'upload de fichiers.");} $incfn{photo}=~ /.*\\(.*)\.(.*)/; ($nom,$ext)=($1,$2); $ext=lc($ext); if (($ext eq "gif") || ($ext eq "jpg") || ($ext eq "jpeg")) {$fichierphoto="$numero.$ext";} else {&erreur("Ce fichier n'est pas une image gif ou jpg, tout autre type de fichier est interdit.");} chmod 0766, $config{dir_photos}; open (photoout,">$config{dir_photos}/$fichierphoto"); binmode(photoout); print photoout $in{photo}; close(photoout); chmod 0755, $config{dir_photos}; chmod 0755, "$config{dir_photos}/$fichierphoto";} open(BASE,"$config{dossierlogs}/base.txt"); @base = ; close(BASE); &date; if ($config{html_ok} ne 1) {$in{titre}=~ s/<([^>]|\n)*>//g;$in{nom}=~ s/<([^>]|\n)*>//g;$in{email}=~ s/<([^>]|\n)*>//g;$in{dep}=~ s/<([^>]|\n)*>//g;$in{url}=~ s/<([^>]|\n)*>//g;$in{annonce}=~ s/<([^>]|\n)*>//g;} unshift (@base, "$numero||$date||$in{code}||$in{rubrique}||$in{titre}||$in{nom}||$in{email}||$in{dep}||$in{url}||$fichierphoto||$in{annonce}\n"); open(BASE,">$config{dossierlogs}/base.txt"); if ($config{flock}) {flock BASE, 2;} print BASE @base; close(BASE); open(LOG,">$config{dossierlogs}/anns.log"); if ($config{flock}) {flock LOG, 2;} print LOG "$in{annonce}"; close(LOG); $in{annonce}=~ s/\015?\012?
/\n\t/g; if ($config{mailtoadmin}) {&envoimail("$in{email} ($in{nom})","$config{emailadmin}","Ajout d'une annonce","Annonce numero: $numero\nNom: $in{nom}\nEmail: $in{email}\nUrl: $in{url}\nRubrique: $in{rubrique}\nDepartement: $in{dep}\n\nANNONCE: $in{annonce}\n\nIP: $ENV{'REMOTE_ADDR'} $ENV{'REMOTE_HOST'}\n$ENV{'HTTP_USER_AGENT'}\nLe $date à $heure.\n");} if ($config{mailtovisit}) {&envoimail("$config{emailadmin} ($config{titresite})","$in{email}","Ajout d'une petite annonce","Votre annonce à été ajoutée le $date à $heure.\nNumero d'annonce: $numero\nVotre code: $in{code}\n-----------\nRubrique: $in{rubrique}\nAnnonce: $in{annonce}\n\n\n\tNous vous remercions\n$config{titresite} sur $config{urlsite}");} &print_header; print qq~




    Votre annonce a été ajoutée avec succès!
Numero: $numero
code: $in{code}


Vous pouvez maintenant aller la voir: rubrique "$in{rubrique}" $taillephoto.




~; &print_footer; exit;} sub erreur { local($erreur)=@_; &print_header; print qq~
$erreur

Veuillez contacter l'administrateur pour toute question.
~; &print_footer; exit;} sub print_form_modif { &print_header; print qq~

Modification de votre annonce:


Veuillez entrez vos numero d'annonce et mot de passe
Numero:
Code:
     


~; &print_footer; exit;} sub modif { open(BASE,"$config{dossierlogs}/base.txt"); if ($config{flock}) {flock BASE, 2;} @BASE=; close(BASE); foreach $ligne (@BASE) {($numero,$date,$code,$rubrique,$titre,$nom,$email,$dep,$url,$photo,$annonce)=split(/\|\|/,$ligne); if ($numero eq $in{numero}){if ($code eq $in{code}) {&print_header; $annonce=~ s/\015?\012?
/\n/g; print qq~

Vous pouvez modifier ou supprimer votre annonce:


~; if ($config{affliste}) {print qq~~;} print qq~~; if ($config{ajoutphoto}) {print qq~~;} print qq~
Nom ou pseudo:(obligatoire)
Votre Adresse E-Mail:(obligatoire)
URL:
Departement, Pays:
Votre code:(obligatoire)
Votre annonce:
Titre:(obligatoire)
Rubrique:
Photo:~; if ($photo) {print qq~~;} print qq~
Laisser tel quel
supprimer la photo
Modifier la photo
Texte de l'annonce:
           


~; &print_footer; exit;} else {&erreur("Numero ou mot de passe incorrect");}}} &erreur("L'annonce numero $in{numero} n'a pas été trouvée"); exit;} sub execmodif { open(BASE,"$config{dossierlogs}/base.txt"); if ($config{flock}) {flock BASE, 2;} @BASE=; close(BASE); foreach $ligne (@BASE) {($numero,$date,$code,$rubrique,$titre,$nom,$email,$dep,$url,$photo,$annonce)=split(/\|\|/,$ligne); if ($numero eq $in{numero}){ if ($code eq $in{oldcode}) {&print_header; $in{annonce}=~ s/\015?\012/
/g; if ($in{todo} eq "supprimer") {$ligne='';} else {if ($in{actionphoto} eq 'modifier') { if ($in{photo}) {if (!$incfn{photo}) {&erreur("Votre navigateur semble ne pas supporter l'upload de fichiers.");} $incfn{photo}=~ /.*\\(.*)\.(.*)/; ($nom,$ext)=($1,$2); $ext=lc($ext); if (($ext eq "gif") || ($ext eq "jpg") || ($ext eq "jpeg")) {$photo="$numero.$ext";} else {&erreur("Ce fichier n'est pas une image gif ou jpg, tout autre type de fichier est interdit.");} chmod 0766, $config{dir_photos}; open (photoout,">$config{dir_photos}/$photo"); binmode(photoout); print photoout $in{photo}; close(photoout); chmod 0755, $config{dir_photos}; chmod 0755, "$config{dir_photos}/$photo";}} elsif ($in{actionphoto} eq 'suppr') {unlink "$config{dir_photos}/$photo" || &envoimail("$email","$config{emailadmin}","Erreur sur le site","Administrateur je te salue,\n\nLe systeme de petites annonces $config{titresite} sur $config{urlsite} dont je suis le représentant n'a pas pu détruire la photo: '$config{dir_photos}/$photo'\n\nVeillez à le faire manuellement\n\nPERL-ZONE'S PETITES ANNONCES MANAGER sur http://$ENV{'SERVER_NAME'}\n"); $photo='';} $ligne="$numero||$date||$in{code}||$in{rubrique}||$in{titre}||$in{nom}||$in{email}||$in{dep}||$in{url}||$photo||$in{annonce}\n";} open(BASE,">$config{dossierlogs}/base.txt"); if ($config{flock}) {flock BASE, 2;} print BASE @BASE; close(BASE); $in{rubrique}=~ s/\ //g; print qq~

Votre annonce a bien été modifiée ou supprimée: La voir.

~; &print_footer; exit;} else {&erreur("Numero ou mot de passe incorrect");}}} &erreur("L'annonce numero $in{numero} n'a pas été trouvée"); exit;} sub print_header {print "Content-type: text/html\n\n"; print $config{header};} sub print_footer {print $config{footer};} sub date { @nbre=('0','1','2','3','4','5','6','7','8','9'); $random=$nbre[rand(@nbre)]; @days=("Dimanche","Lundi","Mardi","Mercredi","Jeudi","vendredi","Samedi"); ($sec,$min,$hour,$mday,$mon,$year,$wday)=(gmtime(time))[0..6]; if ($sec < 10) {$sec="0$sec";} if ($min < 10) {$min="0$min";} if ($hour < 10) {$hour="0$hour";} if ($mday < 10) {$mday="0$mday";} $mon++; if ($mon < 10) {$mon="0$mon";} $year += 1900; $numero="$year$mon$mday$hour$min$sec$random"; $date="$days[$wday] $mday/$mon/$year"; $heure="$hour:$min:$sec GMT";} sub envoimail{ local($from,$to,$sujet,$texte)=@_; if ($config{modemail} eq 'sendmail') { open (MAIL, "|$config{server} -t"); print MAIL "To: $to\n"; print MAIL "From: $from\nX-From: $ENV{'REMOTE_ADDR'} - $ENV{'HTTP_USER_AGENT'}\nX-Script: PA Manager v2.2 (http://perl-zone.ovh.org)\nX-SENDER-LOCATION: $ENV{'SERVER_NAME'}$ENV{'SCRIPT_NAME'}\n"; print MAIL "Subject: $sujet\n\n"; print MAIL "$texte";} elsif ($config{modemail} eq 'smtp') { eval('use IO::Socket; 1;') or &erreur("IO::Socket n'est pas présent sur votre serveur. La version de Perl doit etre < 5"); $remote = IO::Socket::INET->new("$server:smtp(25)"); $remote->autoflush(); print $remote "HELO\r\n"; $trash = <$remote>; print $remote "MAIL From:<$from>\r\n"; $trash = <$remote>; print $remote "RCPT To:<$to>\r\n"; $trash = <$remote>; print $remote "DATA\r\n"; $trash = <$remote>; print $remote "From: <$from>\r\nX-From: $ENV{'REMOTE_ADDR'}\r\nSubject: $sujet\r\n\r\n"; print $remote $texte; print $remote "\r\n.\r\n"; $trash = <$remote>; print $remote "QUIT\r\n";} else {open (MAIL, ">>mail.txt"); print MAIL "\n-----------------------\nTo: $to\nFrom: $from\nSubject: $sujet\n\n$texte";}}