#!/usr/bin/perl
# remd: extrait la substence d'un fichier .ldif (netscape carnet d'adresse) *
# pour l'injecter dans le carnet d'adresse kab (KDE).                       *
# Le script Vérifiera et resoudra également le probléme des doublons        *
# Il doit etre lancer depuis votre repertoire courant ~/home/~ pour Linux   *
# made by - alain Adelmar - 20 fév 2001.                                    *
#****************************************************************************

$x = "x" x 15;
$i = 0;

print "\n$x\nRemarque: Ce script doit etre ouvert dans votre répertoire courant\n$x\n";
$kab = "\.\/\.kde\/share\/apps\/kab\/addressbook.database";

#controle--------------------
if (-e $kab) {
  print "$kab exicte bien a cet endroit\n";
}
#-------------------------------------
# on ouvre kab en vue de comparer les doublons,on lit et on ferme.
open K, "$kab" or die "Ouverture de $kab impossible $!";
@kab = <K>;
close K || die "Fermeture de $kab impossible $!";

 



LABEL_TOP:print "Entrez le nom du fichier à traiter: [nom_du_fichier.ldif]\n";
chomp($file = <STDIN>);
$u = 0;  # initialisation de boucle spéciale pour les groupes de noms

# on verifie que le fichier existe
if (-e $file) {
  $df = localtime(-C $file);
  print "\n$x\nRapport du contenu de $file $df\n";
  print "Un fichier addressbook.database va etre cree\ndans votre repertoire courant, vous n\'aurez plus qu\'a le copier dans \/home\/votre_compte\/.kde\/share\/apps\/kab.\n";
}
else {
  print "Erreur, le fichier $file n\'existe pas\n";
  goto LABEL_TOP;
}

# on ouvre
open F, "$file" or die "Ouverture de $file impossible $!";
foreach $line(<F>) {
  # $u seulement pour les liste de listes ou l'on ne prend que nom et email
  if ($u == 1) {
    if ($line =~ /^member/) {
      # on defini les deux champs nom et adresse_mail
      ($nomp, $mailp) = split(/,/,$line);
      ($kk, $nom)= split(/=/, $nomp);
      ($kk, $mail)= split(/=/, $mailp);
      chomp($mail);
      # on écrit nom et e_mail dans le format (à voir si c'est utile?)
      write;
    }
    else {
      # sortie de la boucle des listes de listes
      $u = 0;
      
    }
  }
  
  # $i++ if (length($line)== 0); # ou # next if (length($line)==0); #ligne a degager
  # bon on place les jalons
  elsif ($line =~ /^dn:\scn=/) {
    ($nom, $mail) = split(/,/,$line);
    $nom =~ s/^dn:\scn=()/$1/;
    $fnom{$i}= "\s\s\s\sfn=\"" . $nom . "\"\n";
    $mail =~ s/mail=()/$1/;
    chomp $mail;
    $email{$nom}= "\s\s\s\semail=\"" . $mail . "\"\n";
  }
   elsif ($line =~ /^givenname:/) {
    &nettoyage($line);
    $prenom = "$mm";   #pour le formatage écran
    $h_prenom{$nom}= "\s\s\s\sfirstname=\"" . $prenom . "\"\n";
  }
  elsif ($line =~ /^mail:/) {
    &nettoyage($line);
    $mail2 = "$mm";
    if (mail2 ne "") {
      $mail4emails = "$mail\\e";
      $emails{$nom}= "\s\s\s\semails=\"" . $mail4emails . $mail2 . "\\e\"\n";
    }
    else {
       $emails{$nom}= "\s\s\s\semails=\"" . $mail4emails . "\\e\"\n";
     }  
  }
  elsif ($line =~ /^sn:/) {
    &nettoyage($line);
    $sn ="$mm";
    $nomP_k{$nom} = "\s\s\s\sname=\"" . $sn . "\"\n";     # $nomP_k = name = nom simple
  }
  elsif ($line =~ /^telephonenumber:/) {
    &nettoyage($line);
    $tel = "$mm";
    $tel_k{$nom} = "\s\s\s\smodem=\"" . $tel . "\"\n";     # $tel_k = telephone 
  }
  elsif ($line =~ /^o:/) {
    &nettoyage($line);
    $org = "$mm";
    $org_k{$nom} = "\s\s\s\sorg=\"" . $org . "\"\n";     # $org_k = org
  }
  elsif ($line =~ /^locality:/) {
    &nettoyage($line);
    $loc = "$mm";
    $loc_k{$nom} = "\s\s\s\stown=\"" . $loc . "\"\n";     # $loc_k = town 
  }
  elsif($line =~ /^postalcode:/) {
    &nettoyage($line);
    $pc_ad = "$mm";
    $pc_k{$nom} = "\s\s\s\szip=\"" . $pc_ad . "\"\n";     # $pc_k = zip 
  }
  elsif($line =~ /^streetaddress:/) {
   &nettoyage($line, $m);
   $st_ad = "$mm";
   $stad_k{$nom} = "\s\s\s\saddress=\"" . $st_ad . "\"\n";     # $stad_k = address
  }
  elsif ($line =~ /^homephone/) {
    &nettoyage($line);
    $h_tel ="$mm";
     $htel_k{$nom} = "\s\s\s\stelephone=\"" . $h_tel . "\"\n";     # $htel_k = town 
  }
  elsif($line =~ /^title:/) {
    &nettoyage($line);
    $title = "$mm";
  }
  elsif ($line =~ /^st:/) {
    &nettoyage($line);
    $reg_ad = "$mm";
  }
  elsif($line =~ /^objectclass:\sperson/)  {
    write;
    $noms[$i]= (["$nom", "$mail", "$mail2", "$tel", "$sn", "$loc", "$pc_ad", "$st_ad", "$reg_ad", "$org"]);
    push @liste, @noms;
    $nom = $mail = $mail2 = $tel = $sn = $loc = $pc_ad = $st_ad = $reg_ad = $org = 0;
    $i++;
  }
    
}
elsif($line =~ /^objectclass:\sgroupOfNames/) {
  $u = 1;
}
$n = $i;
# pour chaque ligne fini passe par ici donc

}				

  


close F or die "Fermeture impossible: $file $!";

for($a=0;$a>=$n;$a++) {
  print $noms[$a];
}

sub nettoyage($line,$mm) {
  my($line)= @_;
  
  ($kk, $mm)= split(/:/, $line);
  $mm =~ s/^\s/$1/;
  chomp $mm;
  return $mm;
}
  

		
format STDOUT =
========================================================
| @<<<<<<<<<<<<<<<<<<<<  | @<<<<<<<<<<<<<<<<<<<<<<<<<< |
$nom, $mail
| @<<<<<<<<<<<<<<<<<<<<<<<<<<   @<<<<<<<<<<<<<<<<<<<<  |
$mail2, $org
| @<<<<<<<<<<<<<<<<<<<<  | @<<<<<<<<<<<<<<<  CP:@<<<<< |
$sn, $tel, $pc_ad
| @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  @<<<<<<<<<<<<<<<<<< |
$st_ad, $loc
| @<<<<<<<<<<<<<<<<<<                                  |
$reg_ad
========================================================
.





END;
