1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
#!/usr/bin/perl
use File::Copy;
require "prontolib.pl";
&read_prefs();
$conn=&open_db_conn;
print("Hi, this may take a minute depending on your db driver \nAdding the references field\n");
&add_refs;
print("Adding Filter count field\n");
&add_filtercount;
print("I'm done :)\n");
sub add_refs
{
if ($prefs{'DatabaseDriver'} eq "CSV") {
&add_csv_column("$prefs{'MailDir'}/messages","ref");
}
if ($prefs{'DatabaseDriver'} eq "mysql" or $prefs{'DatabaseDriver'} eq "Pg") {
if ($prefs{'DatabaseDriver'} eq "mysql") {
$sql = "alter table messages add ref text;";
} else {
$sql = "alter table messages add column ref text";
}
$query=$conn->prepare($sql);
$query->execute();
}
$sql = "select id from messages";
$query= $conn->prepare($sql);
$query->execute();
$count = 0;
while (($msgid) = $query->fetchrow_array()) {
$tmp = &filename_to_tree("$prefs{'MailDir'}/$msgid");
open(TMP,"<$tmp");
while (<TMP>) {
if (/^References:\s*(.+)/i) {
print ("Message: $msgid has ref $1 \n");
$sql = "update messages set ref = '$1' where id = '$msgid'";
$conn->do($sql);
$count++
}
}
close(TMP);
}
print $count . " messages have been updated with refs \n";
}
sub add_filtercount
{
if ($prefs{'DatabaseDriver'} eq "mysql") {
$sql = "alter table filters add count int";
} elsif ($prefs{'DatabaseDriver'} eq "Pg") {
$sql = "alter table filters add column count int";
} elsif ($prefs{'DatabaseDriver'} eq "CSV") {
&add_csv_column("$prefs{'MailDir'}/filters","count");
}
$query = $conn->prepare($sql);
$query->execute();
$sql = "update filters set count = '0'";
$conn->do($sql);
}
sub add_csv_column
{
my ($filename, $column) = @_;
open (FILE, $filename);
@file = <FILE>;
close (FILE);
$columnlist = $file[0];
if ($columnlist =~ m/\b$column\b/) { print "has been added already\n"; return 1; }
if ($column eq "ref") {
$columnlist=~ s/,score/,score,ref/i;
} elsif ($column eq "count") {
$columnlist=~ s/,name/,name,count/i;
}
$file[0] = $columnlist;
copy($filename,$filename."_bak");
open(FILE,">$filename");
foreach(@file) { print FILE $_ }
close(FILE);
}
|