--- trunk/lib/BackupPC/SearchLib.pm 2005/07/11 11:51:09 16 +++ trunk/lib/BackupPC/SearchLib.pm 2005/07/29 17:30:25 26 @@ -4,7 +4,6 @@ use strict; use BackupPC::CGI::Lib qw(:all); use BackupPC::Attrib qw(:all); -use Data::Dumper; use DBI; sub getUnits() { @@ -25,98 +24,44 @@ } sub getWhere($) { - my ($param) = @_; - my $retSQL = ""; - my @conditions = (); - my $cond; + my ($param) = @_; + my @conditions; - - - - if ( defined( $param->{'search_backup_day_from'} ) && $param->{'search_backup_day_from'} ne "") { - push( @conditions, - ' strftime("%d", datetime(backups.date, "unixepoch","localtime")) >= "' - . $param->{'search_backup_day_from'} ."\""); - } - if ( defined( $param->{'search_backup_day_to'} ) && $param->{'search_backup_day_to'} ne "") { - push( @conditions, - ' strftime("%d", datetime(backups.date, "unixepoch","localtime")) <= "' - . $param->{'search_backup_day_from'} ."\""); - } - if ( defined( $param->{'search_backup_month_from'} ) && $param->{'search_backup_month_from'} ne "") { - push( @conditions, - ' strftime("%m", datetime(backups.date, "unixepoch","localtime")) >= "' - . $param->{'search_backup_month_from'} ."\""); - } - if ( defined( $param->{'search_backup_month_to'} ) && $param->{'search_backup_month_to'} ne "") { - push( @conditions, - ' strftime("%m", datetime(backups.date, "unixepoch","localtime")) <= "' - . $param->{'search_backup_month_to'} ."\""); - } - if ( defined( $param->{'search_backup_year_from'} ) && $param->{'search_backup_year_from'} ne "") { - push( @conditions, - ' strftime("%Y", datetime(backups.date, "unixepoch","localtime")) >= "' - . $param->{'search_backup_year_from'} ."\""); - } - if ( defined( $param->{'search_backup_year_to'} ) && $param->{'search_backup_year_to'} ne "") { - push( @conditions, - ' strftime("%Y", datetime(backups.date, "unixepoch","localtime")) <= "' - . $param->{'search_backup_year_to'} ."\""); - } + sub mk_iso_date($$) { + my ($name,$suffix) = @_; - if ( defined( $param->{'search_day_from'} ) && $param->{'search_day_from'} ne "" ) { - push( @conditions, - ' strftime("%d", datetime(files.date, "unixepoch","localtime")) >= "' - . $param->{'search_day_from'} ."\""); - } - if ( defined( $param->{'search_month_from'} ) && $param->{'search_month_from'} ne "") { - push( @conditions, - ' strftime("%m", datetime(files.date, "unixepoch","localtime")) >= "' - . $param->{'search_month_from'} ."\""); - } - if ( defined( $param->{'search_year_from'} ) && $param->{'search_year_from'} ne "") { - push( @conditions, - ' strftime("%Y", datetime(files.date, "unixepoch","localtime")) >= "' - . $param->{'search_year_from'} ."\""); - } - if ( defined( $param->{'search_day_to'} ) && $param->{'search_day_to'} ne "" ) { - push( @conditions, - ' strftime("%d", datetime(files.date, "unixepoch","localtime")) <= "' - . $param->{'search_day_to'} ."\""); - } - if ( defined( $param->{'search_month_to'} ) && $param->{'search_month_to'} ne "" ) { - push( @conditions, - ' strftime("%m", datetime(files.date, "unixepoch","localtime")) <= "' - . $param->{'search_month_to'} ."\"" ); - } - if ( defined( $param->{'search_year_to'} )&& $param->{'search_year_to'} ne "" ) { - push( @conditions, - ' strftime("%Y", datetime(files.date, "unixepoch","localtime")) <= "' - . $param->{'search_year_to'} ."\""); - } + my $yyyy = $param->{ $name . '_year_' . $suffix} || return; + my $mm .= $param->{ $name . '_month_' . $suffix} || + ( $suffix eq 'from' ? 1 : 12); + my $dd .= $param->{ $name . '_day_' . $suffix} || + ( $suffix eq 'from' ? 1 : 31); + return sprintf("%04d-%02d-%02d", $yyyy, $mm, $dd); + } - if ( defined( $param->{'search_host'} ) && $param->{'search_host'} ne "") { - push( @conditions, ' backups.hostID = ' . $param->{'search_host'} ); - } + my $backup_from = mk_iso_date('search_backup', 'from'); + push @conditions, qq{ date(backups.date, 'unixepoch','localtime') >= '$backup_from' } if ($backup_from); + my $backup_to = mk_iso_date('search_backup', 'to'); + push @conditions, qq{ date(backups.date, 'unixepoch','localtime') <= '$backup_to' } if ($backup_to); + + my $files_from = mk_iso_date('search', 'from'); + push @conditions, qq{ date(files.date, 'unixepoch','localtime') >= '$files_from' } if ($files_from); + my $files_to = mk_iso_date('search', 'to'); + push @conditions, qq{ date(files.date, 'unixepoch','localtime') <= '$files_to' } if ($files_to); - if ( defined ($param->{'search_filename'}) && $param->{'search_filename'} ne "") { - push (@conditions, " files.name LIKE '".$param->{'search_filename'}."%'"); - } + print STDERR "backup: $backup_from - $backup_to files: $files_from - $files_to cond:",join(" | ",@conditions); - $retSQL = ""; - foreach $cond(@conditions) - { - if ($retSQL ne "") - { - $retSQL .= " AND "; - } - $retSQL .= $cond; - } + push( @conditions, ' backups.hostID = ' . $param->{'search_host'} ) if ($param->{'search_host'}); - - return $retSQL; + push (@conditions, " upper(files.name) LIKE upper('%".$param->{'search_filename'}."%')") if ($param->{'search_filename'}); + + return ( + join(" and ", @conditions), + $files_from, $files_to, + $backup_from, $backup_to + ); } + sub getFiles($$) { my ($where, $offset) = @_; @@ -141,6 +86,7 @@ FROM files INNER JOIN shares ON files.shareID=shares.ID INNER JOIN hosts ON hosts.ID = shares.hostID + INNER JOIN backups ON backups.num = files.backupNum and backups.hostID = hosts.ID LEFT JOIN dvds ON dvds.ID = files.dvdid }; @@ -320,66 +266,77 @@ } -sub displayGrid($$$) - { - my ($where, $addForm, $offset) = @_; - my $retHTML = ""; - - if ($addForm) - { - $retHTML .= q{
}; - $retHTML .= q{}; +sub displayGrid($$$$) { + my ($where, $addForm, $offset, $hilite) = @_; + my $retHTML = ""; + + if ($addForm) { + $retHTML .= qq{}; + $retHTML.= qq{}; + $retHTML .= qq{}; } - $retHTML .= ""; - $retHTML .= " "; - $retHTML .= ""; - my @files = getFiles($where, $offset); - my $file; + $retHTML .= qq{ +
Host Name Type backup no. size date Media
+ + + + + + + + + + }; + my @files = getFiles($where, $offset); + my $file; - foreach $file(@files) - { - my $ftype = ""; - - if ($file->{'type'} == BPC_FTYPE_DIR) - { - $ftype = "dir"; - } - else - { - $ftype = "file"; - } - $retHTML .= ""; - $retHTML .= ""; - $retHTML .= ""; - $retHTML .= ""; - $retHTML .= ""; - $retHTML .= ""; - $retHTML .= ""; - $retHTML .= ""; - $retHTML .= ""; + sub hilite_html($$) { + my ($html, $search) = @_; + $html =~ s#($search)#$1#gis; + return $html; } - $retHTML .= "
ShareNameType#SizeDateMedia
" . $file->{'hname'} ."" . $file->{'fname'} . "" . $ftype . "" . $file->{'backupno'} . "" . $file->{'size'} . "" . $file->{'date'} . "" . $file->{'dvd'} . "
"; - + sub restore_link($$$$$$) { + my $type = shift; + my $action = 'RestoreFile'; + $action = 'browse' if (lc($type) eq 'dir'); + return sprintf(qq{%s}, $action, @_); + } - $retHTML .= ""; - for (my $ii = 1; $ii <= $#files; $ii++) - { - $retHTML .= "$ii"; - if ($ii < $#files) - { - $retHTML .= " | "; - } - } + foreach $file (@files) { + my $typeStr = BackupPC::Attrib::fileType2Text(undef, $file->{'type'}); + $retHTML .= ""; + + foreach my $v (( + $file->{'sharename'}, + qq{ } . hilite_html( $file->{'fpath'}, $hilite ), + $typeStr, + restore_link( $typeStr, $file->{'hname'}, $file->{'backupno'}, $file->{'sname'}, $file->{'fpath'}, $file->{'backupno'} ), + $file->{'size'}, + $file->{'date'}, + $file->{'dvd'} + )) { + $retHTML .= qq{$v}; + } + $retHTML .= ""; + } + $retHTML .= ""; - if ($addForm) - { - $retHTML .= "
"; - } + # skip pager + return $retHTML; + + $retHTML .= ""; + for (my $ii = 1; $ii <= $#files; $ii++) { + $retHTML .= "$ii"; + if ($ii < $#files) { + $retHTML .= " | "; + } + } + + $retHTML .= "" if ($addForm); - return $retHTML; - } + return $retHTML; +} 1;