123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- #!/usr/bin/perl
- # Script name : tb2claws-mail
- # Script version: 1.0.2
- # Script based on : script kmail2claws-mail.pl
- # Script purpose : convert The Bat! addressbook into Claws Mail addressbook
- # Author : Aleksandar Urosevic aka Urke MMI <urke@gmx.net>
- # Licence : GPL
- #
- # Thanks goes to : Paul Mangan <paul@claws-mail.org>
- #
- # Usage: Export The Bat! Address Book to CSV file format
- # with all fields selected to YES and then start:
- # tb2claws-mail --tbfile=/full/path/to/thebat/addressbook.csv
- #
- # Change Log:
- #
- # 18-12-2003 v 1.0.2
- # - bugfix: added missing attribute-list start
- #
- # 01-01-2003 v 1.0.1
- # - bugfix: no more empty Business Homepage entry
- # - bugfix: no more \0D\0A´s in Notes entry
- # - bugfix: no more double space in Full Name entry
- # - code utilization
- # - add info about number of converted addresses
- #
- # 15-08-2002 v 1.0.0
- # - first public release
- #
- # TODO:
- #
- # * Add switch for Full Name entry on atrybute part
- #
- use Getopt::Long;
- GetOptions("tbfile=s" => \$tbfile);
- #$tbfile = '/home/urke/bin/claws-mail/tb2ldif/thebat-addressbook.csv';
- $total_addresses = 0;
- chdir;
- # check is Claws-Mail instrtalled
- opendir(CLAWS, ".claws-mail/addrbook") || die("Can't open Claws Mail directory! Conversion aborted\n");
- push(@cached, (readdir(CLAWS)));
- closedir(CLAWS);
- # get last existing addressbook filename
- # to set filename for newest addressbook
- # get all existing addressbook filenames
- foreach $cached (@cached) {
- if ($cached =~ m/^addrbook/ && $cached =~ m/[0-9].xml$/) {
- push(addr, "$cached");
- }
- }
- # sort filenames, get last and set newest filename
- @sorted = sort {$a cmp $b} @addr;
- $last_one = pop(@sorted);
- $last_one =~ s/^addrbook-//;
- $last_one =~ s/.xml$//;
- $last_one++;
- $new_addrbk = "addrbook-"."$last_one".".xml";
- # open thebat file to stack
- open (TBFILE, "<$tbfile") || die("Specified Address Book file does not exist.\n\033[5m\033[31mYou must specify full path to input file!\033[0m\nConversion aborted.\n");
- @tblines = <TBFILE>;
- close TBFILE;
- # shift firs line from file because this is field names
- $dross = shift(@tblines);
- # set time mark and header of addressbook
- $time = time;
- $claws_addr = "<?xml version=\"1.0\" encoding=\"ISO-8859-2\" ?>\n";
- $claws_addr .= "<address-book name=\"The Bat! Address Book\" >\n";
- # create addressbook entry from The Bat! addressbook
- foreach $tbline (@tblines) {
- $total_addresses += 1;
- (@tbdata) = split(/,/,$tbline);
- foreach $tbdata (@tbdata) {
- # fix nonacceptable characters
- $tbdata =~ s/^"//;
- $tbdata =~ s/"$//;
- $tbdata =~ s/"/"/g;
- $tbdata =~ s/&/&/g;
- $tbdata =~ s/'/'/g;
- $tbdata =~ s/</</g;
- $tbdata =~ s/>/>/g;
- $tbdata =~ s/\\2C\ /, /g;
- $tbdata =~ s/(\\0D\\0A){1,}/, /g;
- $tbdata =~ s/\ {2,}/ /g;
- }
- # set addressbook field values
- $claws_addr .= " <person uid=\"$time\" first-name=\"$tbdata[1]\""
- ." last-name=\"$tbdata[2]\" nick-name=\"$tbdata[5]\""
- ." cn=\"$tbdata[0]\" >\n"
- ." <address-list>\n";
- $time++;
- $claws_addr .= " <address uid=\"$time\" alias=\"$tbdata[5]\" email=\"$tbdata[4]\""
- ." remarks=\"\" />\n"
- ." </address-list>\n";
- # find is need to make entry attributes
- $check = 0;
- for($i=6; $i<=31; $i++) {
- $tbdata[$i] =~ s/^\s+//;
- $tbdata[$i] =~ s/\s+$//;
- if ($tbdata[$i] ne "") { $check += 1; }
- }
- if ($check > 0) {
- $claws_addr .= " <attribute-list>\n";
- if ($tbdata[1] ne "" || $tbdata[2] ne "") {
- $time++;
- if($tbdata[29] ne "" && $tbdata[1] ne "") { $full_name = "$tbdata[29] $tbdata[1]"; } else { $full_name = "$tbdata[1]"; }
- if($tbdata[3] ne "") { $full_name .= " $tbdata[3]"; }
- if($tbdata[2] ne "") { $full_name .= " $tbdata[2]"; }
- if($tbdata[28] ne "") { $full_name .= " $tbdata[28]"; }
-
- $claws_addr .= " <attribute uid=\"$time\" name=\"Full Name\" >"
- ."$full_name</attribute>\n";
- }
- if ($tbdata[15] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Home Street Address\" >"
- ."$tbdata[15]</attribute>\n";
- }
- if ($tbdata[16] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Home City Address\" >"
- ."$tbdata[16]</attribute>\n";
- }
- if ($tbdata[17] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Home State Address\" >"
- ."$tbdata[17]</attribute>\n";
- }
- if ($tbdata[18] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Home Zip Address\" >"
- ."$tbdata[18]</attribute>\n";
- }
- if ($tbdata[19] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Home Country Address\" >"
- ."$tbdata[19]</attribute>\n";
- }
- if ($tbdata[9] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Home Phone\" >"
- ."$tbdata[9]</attribute>\n";
- }
- if ($tbdata[10] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Home Fax\" >"
- ."$tbdata[10]</attribute>\n";
- }
- if ($tbdata[11] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Mobile Phone\" >"
- ."$tbdata[11]</attribute>\n";
- }
- if ($tbdata[30] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Personal Homepage\" >"
- ."$tbdata[30]</attribute>\n";
- }
- if ($tbdata[14] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Pager\" >"
- ."$tbdata[14]</attribute>\n";
- }
- if ($tbdata[7] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Bussines Company\" >"
- ."$tbdata[7]</attribute>\n";
- }
- if ($tbdata[8] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Bussines Job Title\" >"
- ."$tbdata[8]</attribute>\n";
- }
- if ($tbdata[20] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Business Department\" >"
- ."$tbdata[20]</attribute>\n";
- }
- if ($tbdata[21] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Business Office\" >"
- ."$tbdata[21]</attribute>\n";
- }
- if ($tbdata[22] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Business Street Address\" >"
- ."$tbdata[22]</attribute>\n";
- }
- if ($tbdata[23] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Business City Address\" >"
- ."$tbdata[23]</attribute>\n";
- }
- if ($tbdata[24] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Business State Address\" >"
- ."$tbdata[24]</attribute>\n";
- }
- if ($tbdata[25] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Business Zip Address\" >"
- ."$tbdata[25]</attribute>\n";
- }
- if ($tbdata[26] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Business Country Address\" >"
- ."$tbdata[26]</attribute>\n";
- }
- if ($tbdata[12] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Business Phone\" >"
- ."$tbdata[12]</attribute>\n";
- }
- if ($tbdata[13] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Business Fax\" >"
- ."$tbdata[13]</attribute>\n";
- }
- if ($tbdata[31] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Business Homepage\" >"
- ."$tbdata[31]</attribute>\n";
- }
- if ($tbdata[27] ne "") {
- $time++;
- $claws_addr .= " <attribute uid=\"$time\" name=\"Notes\" >"
- ."$tbdata[27]</attribute>\n";
- }
- $claws_addr .= " </attribute-list>\n";
- }
- # if ( $check > 0 ) {
- # $claws_addr .= "</attribute-list>\n";
- # }
- $claws_addr .= " </person>\n";
- $time++;
- }
- $claws_addr .= "</address-book>\n";
- # print new addressbook to file
- open (NEWADDR, ">.claws-mail/addrbook/$new_addrbk");
- print NEWADDR $claws_addr;
- close NEWADDR;
- # add new addressbook to index
- open (ADDRIN, "<.claws-mail/addrbook/addrbook--index.xml") || die("Can't open addrbook--index.xml");
- @addrindex_file = <ADDRIN>;
- close ADDRIN;
- foreach $addrindex_line (@addrindex_file) {
- if ($addrindex_line =~ m/<\/book_list>/) {
- $rewrite_addrin .= " <book name=\"The Bat! Address Book\" file=\"$new_addrbk\" />\n"
- ." </book_list>\n";
- } else {
- $rewrite_addrin .= "$addrindex_line";
- }
- }
- open (NEWADDRIN, ">.claws-mail/addrbook/addrbook--index.xml");
- print NEWADDRIN "$rewrite_addrin";
- close NEWADDRIN;
- print "You have sucessfully converted your The Bat! addressbook\n";
- print "New addressbook file name: $new_addrbk\n";
- print "Total addresses converted: $total_addresses\n";
- exit;
|