--- trunk/lib/BackupPC/CGI/BurnMedia.pm 2005/06/22 19:22:51 4 +++ trunk/lib/BackupPC/CGI/BurnMedia.pm 2005/10/10 13:57:29 165 @@ -6,104 +6,116 @@ use Data::Dumper; use vars qw($Cgi %In $MyURL $User %Conf $TopDir $BinDir $bpc); -sub action() - { - my $cont = ""; - my $title; - my $subtitle; - my @files; - my $dbh = DBI->connect( "dbi:SQLite:dbname=$Conf{SearchDB}", - "", "", { RaiseError => 1, AutoCommit => 1 } ); - - BackupPC::CGI::Lib::NewRequest(); - $cont = Dumper(%In); - if (!defined($In{submitBurner})) - { - $title = eval(q{ ${h1($Lang->{Burn_media})}}); - $cont = Dumper(%In); - $subtitle = eval(q{ ${h2($Lang->{Burn_media_select})}}); - $cont = <connect($dsn, $db_user, "", { RaiseError => 1, AutoCommit => 0 } ); + + BackupPC::CGI::Lib::NewRequest(); +# $cont = Dumper(%In); + if (!defined($In{submitBurner})) { + $title = eval(q{ ${h1($Lang->{Burn_media})}}); + $cont = Dumper(%In); + $subtitle = eval(q{ ${h2($Lang->{Burn_media_select})}}); + $cont = <{Burn_media})}}); - $subtitle = eval(q{ ${h2($Lang->{Burn_media_assign})}}); - $cont = < prepare($sql); - $st -> execute(); - my $tmp = $st -> fetchrow_hashref(); - $mediumNum = $tmp->{'maxNum'}; - if ($mediumNum ne "") - { - $mediumNum = $tmp->{'maxNum'}; - } - else - { - $mediumNum = "0"; - } - $mediumName = "DVD".$mediumNum; - $st = $dbh -> prepare (q{ - INSERT INTO dvds (num, name) - VALUES - (?,?) - }); - $st -> bind_param(1,$mediumNum); - $st -> bind_param(2,$mediumName); - $st -> execute(); - my $dvdid = $dbh->func('last_insert_rowid'); - - my $updateSQL = q{ - UPDATE files - SET dvdid=? - WHERE files.shareID IN ( - SELECT ID FROM shares WHERE hostID=? - ) AND - files.backupNum=? - }; - my $updateStatement = $dbh -> prepare($updateSQL); - my $orQuery = ""; - - # then, assign dvdid to files - foreach my $key (keys(%In)) - { - if ($key =~ /fcb/) - { - my ($hID, $bNo) = split(/_/, $In{$key}); - - $updateStatement->bind_param(1, $dvdid); - $updateStatement->bind_param(2, $hID); - $updateStatement->bind_param(3, $bNo); - $updateStatement->execute(); - } - } - $cont .= "Backups assigned to media ".$mediumName; + my @selected_backup_ids; + + my $total_size = 0; + + foreach my $key(keys(%In)) { + if ($key =~ m/^fcb([0-9]+)_([0-9]+)_([0-9]+)$/gi) { + my ($host_id, $backup_num, $backup_id) = ($1,$2,$3); + push @selected_backup_ids, $backup_id; + $total_size += BackupPC::SearchLib::getGzipSize($host_id, $backup_num); + } + } + + if (($total_size / 1024) > $Conf{MaxArchiveSize}) { + $cont .= eval( q{ ${h2(Error)}}); + $cont .= "Selected backups size $total_size exceed max archive size $Conf{MaxArchiveSize}."; + } else { + + # create new archive + my $sth = $dbh->prepare(q{ + INSERT INTO archive ( + id, + dvd_nr, + note, + username, + date, + total_size + ) VALUES ( + nextVal('archive_id_seq'), + nextVal('dvd_nr'), + ?, + ?, + NOW(), + ? + ) + }); + + $sth->execute($In{'note'}, $User, $total_size); + + foreach my $backup_id (@selected_backup_ids) { + + # link backups with archive + my $sth = $dbh->prepare(q{ + INSERT INTO archive_backup ( + archive_id, backup_id + ) VALUES ( + (SELECT last_value FROM archive_id_seq), ? + ) + }); + + $sth->execute($backup_id); + + $dbh->commit(); + + } + + my ($dvd_nr) = $dbh->selectrow_array(qq{ + select last_value from dvd_nr + }); + + $dvd_nr ||= 'error'; + + $dbh->commit(); + + $cont .= q{ + Archived following backups: + } . join(", ", @selected_backup_ids) . q{ +
with total size of + } . sprintf("%1.2f Mb", $total_size / 1024 / 1024) . q{ + to media } . $dvd_nr . q{ + with following message: +
+ } . $In{'note'} . q{ +
+ }; + } } - - Header($Lang->{Burn_media}, "", 1, "", $cont); - Trailer(); - $dbh -> disconnect(); - } + + Header($Lang->{Burn_media}, "", 1, "", $cont); + + Trailer(); + $dbh->disconnect(); +} 1;