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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
#!/usr/bin/perl
use File::Copy;
require "prontolib.pl";
&read_prefs();
$conn=&open_db_conn;
&add_xuidl;
&add_serverstat;
&up_vfolders;
&update_addybook;
&fix_boxlist;
sub update_addybook
{
$sql = "create table groups (id int not null, name text)";
$conn->do($sql);
if ($prefs{'DatabaseDriver'} eq "mysql") {
$sql = "alter table addresses add groups text";
} elsif ($prefs{'DatabaseDriver'} eq "Pg") {
$sql = "alter table addresss add column groups text";
} else {
&add_csv_column("$prefs{'MailDir'}/addresses","groups");
return 1;
}
$conn->do($sql);
}
sub up_vfolders
{
$sql = "select id from boxlist where id > 100";
$query=$conn->prepare($sql);
$query->execute();
while (my ($id) = $query->fetchrow_array()) {
$sql2 = "update boxlist set id = $id+1000 where id = $id";
$conn->do($sql2);
}
$sql = "update boxlist set id = 1000 where id = 100";
$conn->do($sql);
}
sub add_serverstat
{
if ($prefs{'DatabaseDriver'} eq "mysql") {
$sql = "alter table messages add serverstat int";
} elsif ($prefs{'DatabaseDriver'} eq "Pg") {
$sql = "alter table messages add column serverstat int";
} elsif ($prefs{'DatabaseDriver'} eq "CSV") {
&add_csv_column("$prefs{'MailDir'}/messages","serverstat");
return 1;
}
$query = $conn->prepare($sql);
$query->execute();
$sql = "update messages set serverstat = 0";
$conn->do($sql);
}
sub add_xuidl
{
if ($prefs{'DatabaseDriver'} eq "mysql") {
$sql = "alter table messages add xuidl text";
} elsif ($prefs{'DatabaseDriver'} eq "Pg") {
$sql = "alter table messages add column xuidl text";
} elsif ($prefs{'DatabaseDriver'} eq "CSV") {
&add_csv_column("$prefs{'MailDir'}/messages","xuidl");
return 1;
}
$query = $conn->prepare($sql);
$query->execute();
}
sub fix_boxlist
{
my($parent) = @_;
my($sql,$query,$query2,@row,$lastid);
if(defined $parent) {
$sql = "select id,sibling,parent from boxlist where parent=? order by id desc";
$query=$conn->prepare($sql);
$query->execute($parent);
}
else {
$sql = "select id,sibling,parent from boxlist where (parent=-1 or parent is NULL) order by id desc";
$query=$conn->prepare($sql);
$query->execute();
}
$lastid=65535;
while(@row=$query->fetchrow_array()) {
$sql = "update boxlist set sibling=? where id=?";
$query2=$conn->prepare($sql);
$query2->execute($lastid,$row[0]);
$lastid=$row[0];
&fix_boxlist($row[0]);
}
}
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; }
my @fields = split(/,/,$columnlist);
my $last = scalar(@fields);
$last--;
#maybe some one upgraded from 1.0 to 1.2.x and now upping to 2.x
if ($column eq "xuidl") {
if ($fields[$last] =~ /ref/) {
$columnlist =~ s/,ref/,ref,$column/;
} else { #maybe not
$columnlist =~ s/,score/,score,$column/;
}
}
if ($column eq "serverstat") {
$columnlist=~ s/,xuidl/,xuidl,$column/;
}
if ($column eq "groups") {
$columnlist=~ s/,public_key/,public_key,groups/;
}
$file[0] = $columnlist;
copy($filename,$filename."_bak");
open(FILE,">$filename");
foreach(@file) { print FILE $_ }
close(FILE);
}
|