r9152@llin: dpavlin | 2006-01-30 14:11:45 +0100
[BackupPC.git] / lib / BackupPC / CGI / BurnMedia.pm
1 package BackupPC::CGI::BurnMedia;
2
3 use strict;
4 use BackupPC::CGI::Lib qw(:all);
5 use BackupPC::SearchLib;
6 use Data::Dumper;
7 use vars qw($Cgi %In $MyURL $User %Conf $TopDir $BinDir $bpc);
8
9 my $dsn = $Conf{SearchDSN};
10 my $db_user = $Conf{SearchUser} || '';
11
12 sub action() {
13         my $cont = "";
14         my $title;
15         my $subtitle;
16         my @files;
17
18         my $dbh = DBI->connect($dsn, $db_user, "", { RaiseError => 1, AutoCommit => 0 } );
19
20         BackupPC::CGI::Lib::NewRequest();
21 #       $cont = Dumper(%In);
22         if (!defined($In{submitBurner})) {
23                 $title = eval(q{ ${h1($Lang->{Burn_media})}});
24                 $cont = Dumper(%In);
25                 $subtitle = eval(q{ ${h2($Lang->{Burn_media_select})}});
26                 $cont = <<EOF;
27
28         $title
29         $subtitle
30         
31 EOF
32               
33                 $cont .= "Backups that have not been archived:<br>";
34                 $cont .= BackupPC::SearchLib::displayBackupsGrid( \%In );
35             
36         } else {
37
38                 my @selected_backup_ids;
39
40                 my $total_size = 0;
41                 my $selected = 0;
42
43                 my $parts = 1;
44
45                 foreach my $key(keys(%In)) {
46                         if ($key =~ m/^fcb([0-9]+)_([0-9]+)_([0-9]+)$/gi) {
47                                 my ($host_id, $backup_num, $backup_id) = ($1,$2,$3);
48                                 push @selected_backup_ids, $backup_id;
49                                 $total_size += BackupPC::SearchLib::getGzipSize($host_id, $backup_num);
50                                 $selected++;
51
52                                 my ($this_part) = $dbh->selectrow_array("select parts from backups where id = ?", undef, $backup_id);
53                                 $this_part--;
54                                 $parts += $this_part;
55                         }
56                 }
57
58                 if ($total_size > ($Conf{MaxArchiveSize} * $parts)) {
59                         $cont .= eval( q{ ${h2(Error)}});
60                         $cont .= "Selected backups size " . sprintf("%1.2f", $total_size / 1024) ." Kb exceed max archive size " . sprintf("%1.2f", $Conf{MaxArchiveSize} / 1024) ." Kb.";
61                 } elsif ($total_size == 0) {
62                         $cont .= eval( q{ ${h2(Error)}});
63                         $cont .= "No backups selected.";
64                 } else {
65
66                         # create new archive
67                         my $sth = $dbh->prepare(q{
68                                 INSERT INTO archive (
69                                         id,
70                                         dvd_nr,
71                                         note,
72                                         username,
73                                         date,
74                                         total_size
75                                 ) VALUES (
76                                         nextVal('archive_id_seq'),
77                                         nextVal('dvd_nr'),
78                                         ?,
79                                         ?,
80                                         NOW(),
81                                         ?
82                                 )
83                         });
84
85                         $sth->execute($In{'note'}, $User, $total_size);
86
87                         foreach my $backup_id (@selected_backup_ids) {
88
89                                 # link backups with archive
90                                 my $sth = $dbh->prepare(q{
91                                         INSERT INTO archive_backup (
92                                                 archive_id, backup_id
93                                         ) VALUES (
94                                                 (SELECT last_value FROM archive_id_seq), ?
95                                         )
96                                 });
97
98                                 $sth->execute($backup_id);
99
100                                 $dbh->commit();
101
102                         }
103
104                         my ($dvd_nr) = $dbh->selectrow_array(qq{
105                                 select last_value from dvd_nr
106                         });
107
108                         $dvd_nr ||= 'error';
109
110                         $dbh->commit();
111
112                         $cont .= q{
113                                 Archived following backups:
114                         } . join(", ", @selected_backup_ids) . q{
115                                 <br/>with total size of
116                         <b>} . sprintf("%1.2f Mb", $total_size / 1024 / 1024) . q{</b>
117                                 to media <b>} . $dvd_nr . q{</b>
118                                 with following message:
119                                 <div style="background-color: #e0e0e0; display: inline; padding: 2px;">
120                         } . $In{'note'} . q{
121                                 </div>
122                         };
123                 }
124         }
125
126         Header($Lang->{Burn_media}, "", 1, "", $cont);
127
128         Trailer();
129         $dbh->disconnect();
130 }
131
132 1;