X-Git-Url: http://git.rot13.org/?p=BackupPC.git;a=blobdiff_plain;f=lib%2FBackupPC%2FSearch.pm;h=70f084b5c68770291f8845319de8e00eb2fca8e3;hp=ad27bb16afb2b75cdcbdac4d442baf9c6342c07a;hb=06017d5181d9c62f8cbd1c6d58d831f54d7d4ad1;hpb=2c835fefb850a3d02add14e9e8aafe13e06a17bb;ds=sidebyside diff --git a/lib/BackupPC/Search.pm b/lib/BackupPC/Search.pm index ad27bb1..70f084b 100644 --- a/lib/BackupPC/Search.pm +++ b/lib/BackupPC/Search.pm @@ -79,31 +79,28 @@ sub dates_from_form($) { sub mk_epoch_date($$) { my ($name,$suffix) = @_; - my $yyyy = $param->{ $name . '_year_' . $suffix} || return undef; - my $mm .= $param->{ $name . '_month_' . $suffix} || - ( $suffix eq 'from' ? 1 : 12); - my $dd .= $param->{ $name . '_day_' . $suffix} || - ( $suffix eq 'from' ? 1 : 31); + my $yyyy = $param->{ $name . '_year_' . $suffix} || return undef; + my $mm = $param->{ $name . '_month_' . $suffix}; + my $dd = $param->{ $name . '_day_' . $suffix}; $yyyy =~ s/\D//g; - $mm =~ s/\D//g; - $dd =~ s/\D//g; - - my $h = my $m = my $s = 0; - if ($suffix eq 'to') { - $h = 23; - $m = 59; - $s = 59; - } + $mm =~ s/\D//g; + $dd =~ s/\D//g; my $dt = new DateTime( - year => $yyyy, - month => $mm, - day => $dd, - hour => $h, - minute => $m, - second => $s, + year => $yyyy, + month => $mm || 1, + day => $dd || 1, + hour => 0, + minute => 0, + second => 0, ); + if ( $suffix eq 'to' && ( ! $mm || ! $dd ) ) { + $dt += DateTime::Duration->new( years => 1 ) if ! $mm; + $dt += DateTime::Duration->new( months => 1 ) if ! $dd; + $dt -= DateTime::Duration->new( days => 1 ); + } + print STDERR "mk_epoch_date($name,$suffix) [$yyyy-$mm-$dd] = " . $dt->ymd . " " . $dt->hms . "\n"; return $dt->epoch || 'NULL'; } @@ -229,8 +226,8 @@ sub getFiles($) { # do we have to add tables for burned media? if ( $param->{burned} ) { $sql_from .= qq{ - LEFT OUTER JOIN archive_backup on archive_backup.backup_id = backups.id - LEFT OUTER JOIN archive_burned on archive_burned.archive_id = archive_backup.archive_id + LEFT OUTER JOIN archive_backup_parts on backup_id = backups.id + LEFT OUTER JOIN archive_burned on archive_burned.archive_id = archive_id }; } @@ -398,6 +395,13 @@ print STDERR "## sort=". ($param->{'sort'} || 'no sort param') . " burn sql orde LEFT OUTER JOIN archive_parts ap ON ap.backup_part_id = p.id LEFT OUTER JOIN archive_burned ab ON ab.archive_id = ap.archive_id GROUP BY p.id,filename,b.date,age,p.size,p.part_nr + }; + + $sql .= qq{ + HAVING count(ap.*) = 0 + } unless $param->{scheduled}; + + $sql .= qq{ ORDER BY b.date,p.part_nr }; my $sth = $dbh->prepare( $sql ); @@ -418,14 +422,12 @@ sub displayBackupsGrid($) { my $param = shift; my $max_archive_size = $Conf{ArchiveMediaSize} || die "no ArchiveMediaSize"; - my $max_archive_file_size = $Conf{ArchiveChunkSize} || die "no MaxFileInSize"; my $retHTML .= qq|
|; @@ -475,6 +477,11 @@ var max_file_size = $max_archive_file_size; } $retHTML .= ""; + + $retHTML .= q{ + + } unless $param->{scheduled}; + $retHTML .= "
"; return $retHTML; @@ -599,16 +606,16 @@ sub displayGrid($) { $sth_archived ||= $dbh->prepare(qq{ select - dvd_nr, note, + archive.dvd_nr, note, count(archive_burned.copy) as copies from archive inner join archive_burned on archive_burned.archive_id = archive.id - inner join archive_backup on archive.id = archive_backup.archive_id - inner join backups on backups.id = archive_backup.backup_id + inner join archive_backup_parts on archive.id = archive_backup_parts.archive_id + inner join backups on backups.id = archive_backup_parts.backup_id inner join hosts on hosts.id = backups.hostid inner join shares on shares.id = backups.shareid where hosts.name = ? and shares.name = ? and backups.num = ? - group by dvd_nr, note + group by archive.dvd_nr, note }); my @mediums;