return strftime($t_fmt,localtime());
}
+sub dumpArchive2XML($$$)
+{
+ my ($dbh, $dvd_nr, $filename) = @_;
+ my %archive;
+ my $output = new IO::File(">$filename");
+ my $writer = new XML::Writer(OUTPUT=>$output, NEWLINES => 1);
+
+ my $files_sql = q{
+ SELECT
+ files.path AS path,
+ files.date AS date,
+ files.type AS type,
+ files.size AS size
+ FROM files, backups, shares
+ WHERE files.backupnum=backups.num AND
+ files.shareid=shares.id AND
+ shares.hostid=backups.hostid AND
+ backups.id=?
+ };
+
+ my $backups_sql = q{
+ SELECT
+ backups.id AS backup_id,
+ hosts.name AS host,
+ backups.num AS num,
+ backups.date AS date,
+ shares.name AS share,
+ backups.size AS backup_size,
+ backups.inc_size AS compress_size
+ FROM backups, archive_backup, hosts, shares
+ WHERE archive_backup.backup_id = backups.id
+ AND hosts.id=backups.hostid
+ AND shares.id=backups.shareid
+ AND archive_backup.archive_id = ?
+ };
+
+ my $sth = $dbh->prepare("SELECT dvd_nr, total_size, note, username, date,id FROM archive WHERE dvd_nr=?");
+ $sth->execute($dvd_nr);
+ my $row = $sth->fetchrow_hashref();
+
+ my $row_h;
+ foreach my $hide (qw/id note/) {
+ $row_h->{$hide} = $row->{$hide} || die "no $hide";
+ delete $row->{$hide};
+ }
+
+ $writer->startTag("archive", %{$row});
+
+ $writer->startTag("note");
+ $writer->characters( $row_h->{'note'} );
+ $writer->endTag("note");
+
+ my $sth_backups = $dbh->prepare( $backups_sql );
+ $sth_backups->execute( $row_h->{'id'} );
+
+ while (my $row = $sth_backups->fetchrow_hashref()) {
+
+ my $sth_files = $dbh->prepare( $files_sql);
+ $sth_files->execute($row->{'backup_id'});
+
+ delete($row->{'backup_id'});
+
+ $writer->startTag( "backup", %{$row} );
+
+ while (my $row = $sth_files->fetchrow_hashref()) {
+ # convert filetype to string
+ $row->{'type'} = BackupPC::Attrib::fileType2Text(undef, $row->{'type'});
+ my $path = $row->{'path'}; delete $row->{'path'};
+
+ $writer->startTag("file", %{$row});
+ $writer->characters( $path );
+ $writer->endTag("file");
+ }
+ $writer->endTag("backup");
+ }
+
+ $writer->endTag("archive");
+ $writer->end();
+
+}
+
+
+
#----- main
my $sth = $dbh->prepare( qq{
print "Working on DVD #$dvd_nr in $tmp_dir\n";
- my $list_file = my $iso_file = "${iso_dir}/${dvd_nr}";
+ my $list_file = my $iso_file = my $xml_file = "${iso_dir}/${dvd_nr}";
$list_file .= '.list';
$iso_file .= '.iso';
+ $xml_file .= '.xml';
if (-e $iso_file) {
print "ISO $iso_file allready exists\n";
# FIXME add file list in xml and txt and note file
+ dumpArchive2XML($dbh, $dvd_nr, $xml_file);
+ print $list "$xml_file\n";
+
close($list);
print "Running mkisofs now for $inc increments...\n";
return $retHTML;
}
-sub dumpArchive2XML($$)
-{
- my ($arcID, $filename) = @_;
- my $dbh;
- my $sth;
- my $sth_backups;
- my $sth_files;
- my $row;
- my $row_backups;
- my $row_files;
- my %archive;
- my $output = new IO::File(">$filename");
- my $writer = new XML::Writer(OUTPUT=>$output, NEWLINES => 1);
-
-
- $dbh = get_dbh();
-# my $bpc = BackupPC::Lib->new(undef, undef, 1) || die;
-# my %Conf = $bpc->Conf();
-
-# my $dsn = $Conf{SearchDSN} || die "Need SearchDSN in config.pl\n";
-# my $user = $Conf{SearchUser} || '';
-
- my $files_sql = q{
- SELECT
- files.name AS filename,
- files.path AS filepath,
- files.date AS filedate,
- files.type AS filetype,
- files.size AS filesize
- FROM files, backups, shares
- WHERE files.backupnum=backups.num AND
- files.shareid=shares.id AND
- shares.hostid=backups.hostid AND
- backups.id=?
- };
-
- my $backups_sql = q{
- SELECT backups.id AS backupid,
- hosts.name AS hostname,
- backups.num AS backupnum,
- backups.date AS backupdate,
- backups.type AS backuptype,
- shares.name AS sharename,
- backups.size AS backupsize,
- backups.inc_size AS inc_size,
- backups.inc_deleted AS inc_deleted
- FROM backups, archive_backup, hosts, shares
- WHERE archive_backup.backup_id = backups.id
- AND hosts.id=backups.hostid
- AND shares.id=backups.shareid
- AND archive_backup.archive_id = ?
- };
-
- $dbh = DBI->connect($dsn, $user, "", { RaiseError => 1, AutoCommit => 1 });
-
- $sth = $dbh->prepare("SELECT dvd_nr, total_size, note, username, date FROM archive WHERE ID=?");
- $sth->execute($arcID);
- $row = $sth->fetchrow_hashref();
- $writer->startTag("archive", "dvd_nr" => $row->{'dvd_nr'},
- "total_size" => $row->{'total_size'},
- "username" => $row->{'username'},
- "date" => $row->{'date'}
- );
-
-
- $writer->startTag("note");
- $writer->characters( $row->{'note'});
- $writer->endTag("note");
- $sth_backups = $dbh->prepare( $backups_sql );
- $sth_backups->execute($arcID);
- while ($row_backups = $sth_backups->fetchrow_hashref())
- {
- $writer->startTag("backup",
- "host" => $row_backups->{'hostname'},
- "num" => $row_backups->{'backupnum'},
- "date" => $row_backups->{'backupdate'},
- "type" => $row_backups->{'backuptype'},
- "share"=> $row_backups->{'sharename'},
- "size" => $row_backups->{'backupsize'},
- "inc_size" => $row_backups->{'inc_size'},
- "inc_deleted" => $row_backups->{'inc_deleted'}
- );
-
- $sth_files = $dbh->prepare(
- $files_sql
- );
- $sth_files->execute($row_backups->{'backupid'});
- while ($row_files = $sth_files->fetchrow_hashref())
- {
- $writer->startTag("file",
- "path" => $row_files->{'filepath'},
- "date" => $row_files->{'filedate'},
- "type" => $row_files->{'filetype'},
- "size" => $row_files->{'filesize'}
- );
- $writer->characters( $row_files->{'filename'});
- $writer->endTag("file");
- }
- $writer->endTag("backup");
- }
-
- $writer->endTag("archive");
- $writer->end();
-
-}
-
1;