/[BackupPC]/trunk/lib/BackupPC/SearchLib.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/lib/BackupPC/SearchLib.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 17 by dpavlin, Mon Jul 11 13:22:38 2005 UTC revision 72 by dpavlin, Thu Aug 25 11:41:58 2005 UTC
# Line 4  package BackupPC::SearchLib; Line 4  package BackupPC::SearchLib;
4  use strict;  use strict;
5  use BackupPC::CGI::Lib qw(:all);  use BackupPC::CGI::Lib qw(:all);
6  use BackupPC::Attrib qw(:all);  use BackupPC::Attrib qw(:all);
 use Data::Dumper;  
7  use DBI;  use DBI;
8    use DateTime;
9    use vars qw(%In $MyURL);
10    use Time::HiRes qw/time/;
11    
12    my $on_page = 100;
13    my $pager_pages = 10;
14    
15    my $dsn = $Conf{SearchDSN};
16    my $db_user = $Conf{SearchUser} || '';
17    
18  sub getUnits() {  sub getUnits() {
19      my @ret = ();          my @ret;
20      my $tmp;  
21      my $dbh = DBI->connect( "dbi:SQLite:dbname=${TopDir}/$Conf{SearchDB}",          my $dbh = DBI->connect($dsn, $db_user, "", { RaiseError => 1, AutoCommit => 1 } );
22          "", "", { RaiseError => 1, AutoCommit => 1 } );          my $sth = $dbh->prepare(qq{ SELECT id, share FROM shares ORDER BY share} );
23      my $st =          $sth->execute();
24        $dbh->prepare(          push @ret, { 'id' => '', 'share' => '-'};       # dummy any
25          " SELECT shares.ID AS ID, shares.share AS name FROM shares;");  
26      $st->execute();          while ( my $row = $sth->fetchrow_hashref() ) {
27      push (@ret, { 'ID' => '', 'name' => '-'});                  push @ret, $row;
28      while ( $tmp = $st->fetchrow_hashref() ) {          }
29          push( @ret, { 'ID' => $tmp->{'ID'}, 'name' => $tmp->{'name'} } );          $dbh->disconnect();
30      }          return @ret;
     $dbh->disconnect();  
     return @ret;  
31  }  }
32    
33  sub getWhere($) {  sub epoch_to_iso {
34      my ($param)    = @_;          my $t = shift || return;
35      my $retSQL     = "";          $t += 60 * 60 * +2;     # FIXME add TZ
36      my @conditions = ();          my $dt = DateTime->from_epoch( epoch => $t ) || return;
37      my $cond;          print STDERR "BUG: $t != " . $dt->epoch . "\n" unless ($t == $dt->epoch);
38            return $dt->ymd . ' ' . $dt->hms;
39    }
40    
41        sub getWhere($) {
42              my ($param)    = @_;
43                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'}  ."\"");  
     }  
44    
45      if ( defined( $param->{'search_day_from'} )   && $param->{'search_day_from'} ne "" ) {          sub mk_epoch_date($$) {
46          push( @conditions,                  my ($name,$suffix) = @_;
             ' 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'} ."\"");  
     }  
47    
48      if ( defined( $param->{'search_host'} ) && $param->{'search_host'} ne "") {                  my $yyyy = $param->{ $name . '_year_' . $suffix} || return;
49        push( @conditions, ' backups.hostID = ' . $param->{'search_host'} );                  my $mm .= $param->{ $name . '_month_' . $suffix} ||
50      }                          ( $suffix eq 'from' ? 1 : 12);
51                    my $dd .= $param->{ $name . '_day_' . $suffix} ||
52                            ( $suffix eq 'from' ? 1 : 31);
53                    my $dt = new DateTime(
54                            year => $yyyy,
55                            month => $mm,
56                            day => $dd
57                    );
58                    return $dt->epoch || 'NULL';
59            }
60    
61            my $backup_from = mk_epoch_date('search_backup', 'from');
62            push @conditions, qq{ backups.date >= $backup_from } if ($backup_from);
63            my $backup_to = mk_epoch_date('search_backup', 'to');
64            push @conditions, qq{ backups.date <= $backup_to } if ($backup_to);
65    
66            my $files_from = mk_epoch_date('search', 'from');
67            push @conditions, qq{ files.date >= $files_from } if ($files_from);
68            my $files_to = mk_epoch_date('search', 'to');
69            push @conditions, qq{ files.date <= $files_to } if ($files_to);
70    
71      if ( defined ($param->{'search_filename'}) && $param->{'search_filename'} ne "") {          print STDERR "backup: $backup_from - $backup_to files: $files_from - $files_to cond:" . join(" | ",@conditions);
         push (@conditions, " files.name LIKE '".$param->{'search_filename'}."%'");  
         }  
72            
73      $retSQL = "";          push( @conditions, ' files.shareid = ' . $param->{'search_share'} ) if ($param->{'search_share'});
     foreach $cond(@conditions)  
       {  
           if ($retSQL ne "")  
             {  
                 $retSQL .= " AND ";  
             }  
           $retSQL .= $cond;  
       }        
74    
75                push (@conditions, " upper(files.path) LIKE upper('%".$param->{'search_filename'}."%')") if ($param->{'search_filename'});
76      return $retSQL;  
77            return (
78                    join(" and ", @conditions),
79                    $files_from, $files_to,
80                    $backup_from, $backup_to
81            );
82  }  }
83    
84  sub getFiles($$)  
85    {  sub getFiles($$) {
86        my ($where, $offset) = @_;          my ($where, $offset) = @_;
87          
88                  my $dbh = DBI->connect($dsn, $db_user, "", { RaiseError => 1, AutoCommit => 1 } );
89        my $dbh = DBI->connect( "dbi:SQLite:dbname=${TopDir}/$Conf{SearchDB}",  
90          "", "", { RaiseError => 1, AutoCommit => 1 } );          my $sql_cols = qq{
91        my $sql =                            files.id                        AS fid,
92          q{                    hosts.name                      AS hname,
93                  SELECT  files.id                        AS fid,                  shares.name                     AS sname,
94                          hosts.name                      AS hname,                  shares.share                    AS sharename,
95                          shares.name                     AS sname,                  files.backupNum                 AS backupNum,
96                          shares.share                    AS sharename,                  files.name                      AS filename,
97                          files.backupNum                 AS backupNum,                  files.path                      AS filepath,
98                          files.name                      AS filename,                  files.date                      AS date,
99                          files.path                      AS filepath,                  files.type                      AS filetype,
100                          shares.share||files.fullpath    AS networkPath,                  files.size                      AS size,
101                          date(files.date, 'unixepoch', 'localtime') AS date,                  dvds.name                       AS dvd
102                          files.type                      AS filetype,          };
103                          files.size                      AS size,  
104                          dvds.name                       AS dvd          my $sql_from = qq{
105                  FROM files                  FROM files
106                          INNER JOIN shares       ON files.shareID=shares.ID                          INNER JOIN shares       ON files.shareID=shares.ID
107                          INNER JOIN hosts        ON hosts.ID = shares.hostID                          INNER JOIN hosts        ON hosts.ID = shares.hostID
108                            INNER JOIN backups      ON backups.num = files.backupNum and backups.hostID = hosts.ID AND backups.shareID = shares.ID
109            };
110    
111            my $sql_dvd_from = qq{
112                          LEFT  JOIN dvds         ON dvds.ID = files.dvdid                          LEFT  JOIN dvds         ON dvds.ID = files.dvdid
113            };          };
114    
115        if (defined($where) && $where ne "")          my $sql_where;
116          {          $sql_where = " WHERE ". $where if ($where);
             $sql .= " WHERE ". $where;        
         }  
117    
118        $sql .=          my $sql_order = qq{
119          q{                            ORDER BY files.date
120              ORDER BY files.id                  LIMIT $on_page
121                LIMIT 100                  OFFSET ?
               OFFSET ? * 100 + 1  
122          };          };
         
         
         
       my $st = $dbh->prepare(  
           $sql  
           );      
       if (!defined($offset) && $offset ne "")  
       {  
         $st->bind_param(1, $offset);  
       }  
       else  
       {  
         $st->bind_param(1,0);  
       }  
       $st->execute;  
         
       my @ret = ();  
       my $tmp;  
         
       while ($tmp = $st->fetchrow_hashref())  
         {  
             push(@ret, {  
                            'hname'       => $tmp->{'hname'},  
                            'sname'       => $tmp->{'sname'},  
                            'sharename'   => $tmp->{'sharename'},  
                            'backupno'    => $tmp->{'backupNum'},  
                            'fname'       => $tmp->{'filename'},  
                            'fpath'       => $tmp->{'filepath'},  
                            'networkpath' => $tmp->{'networkPath'},  
                            'date'        => $tmp->{'date'},  
                            'type'        => $tmp->{'filetype'},  
                            'size'        => $tmp->{'size'},  
                            'id'          => $tmp->{'fid'},  
                            'dvd'         => $tmp->{'dvd'}  
                        }  
             );  
                                   
         }  
         
       $st->finish();  
       $dbh->disconnect();  
       return @ret;  
   }  
123    
124  sub getBackupsNotBurned()          my $sql_count = qq{ select count(files.id) $sql_from $sql_where };
125    {          my $sql_results = qq{ select $sql_cols $sql_from $sql_dvd_from $sql_where $sql_order };
126        my $dbh = DBI->connect( "dbi:SQLite:dbname=${TopDir}/$Conf{SearchDB}",  
127          "", "", { RaiseError => 1, AutoCommit => 1 } );                $offset ||= 0;
128        my $sql = q{          $offset = ($offset * $on_page);
129            SELECT  
130              hosts.ID         AS hostID,          my $sth = $dbh->prepare($sql_count);
131              hosts.name       AS host,          $sth->execute();
132              backups.num      AS backupno,          my ($results) = $sth->fetchrow_array();
133              backups.type     AS type,  
134              backups.date     AS date          $sth = $dbh->prepare($sql_results);
135            FROM backups, shares, files, hosts          $sth->execute( $offset );
136            WHERE  
137              backups.num    = files.backupNum  AND          if ($sth->rows != $results) {
138              shares.ID      = files.shareID    AND                            my $bug = "$0 BUG: [[ $sql_count ]] = $results while [[ $sql_results ]] = " . $sth->rows;
139              backups.hostID = shares.hostID    AND                  $bug =~ s/\s+/ /gs;
140              hosts.ID       = backups.hostID   AND                  print STDERR "$bug\n";
141              files.dvdid    IS NULL          }
142            GROUP BY  
143              backups.hostID, backups.num          my @ret;
144        };        
145        my $st = $dbh -> prepare( $sql );          while (my $row = $sth->fetchrow_hashref()) {
146        my @ret = ();                  push(@ret, {
147        $st -> execute();                          'hname'         => $row->{'hname'},
148                            'sname'         => $row->{'sname'},
149        while ( my $tmp = $st -> fetchrow_hashref() )                          'sharename'     => $row->{'sharename'},
150          {                                    'backupno'      => $row->{'backupnum'},
151              push(@ret, {                          'fname'         => $row->{'filename'},
152                           'host'     => $tmp->{'host'},                          'fpath'         => $row->{'filepath'},
153                           'hostid'   => $tmp->{'hostID'},                          'networkpath'   => $row->{'networkpath'},
154                           'backupno' => $tmp->{'backupno'},                          'date'          => $row->{'date'},
155                           'type'     => $tmp->{'type'},                          'type'          => $row->{'filetype'},
156                           'date'     => $tmp->{'date'}                          'size'          => $row->{'size'},
157                         }                          'id'            => $row->{'fid'},
158              );                          'dvd'           => $row->{'dvd'}
159                    });
160            }
161        
162            $sth->finish();
163            $dbh->disconnect();
164            return ($results, \@ret);
165    }
166    
167    sub getBackupsNotBurned() {
168    
169            my $dbh = DBI->connect($dsn, $db_user, "", { RaiseError => 1, AutoCommit => 1 } );
170            my $sql = q{
171            SELECT
172                    backups.hostID          AS hostid,
173                    min(hosts.name)         AS host,
174                    backups.num             AS backupno,
175                    min(backups.type)       AS type,
176                    min(backups.date)       AS date,
177                    min(backups.size)       AS size
178            FROM backups
179                    INNER JOIN hosts        ON hosts.ID = backups.hostID
180            WHERE
181                    files.dvdid     IS NULL
182            GROUP BY
183                    backups.hostID, backups.num
184            ORDER BY min(backups.date)
185            };
186            my $sth = $dbh->prepare( $sql );
187            my @ret;
188            $sth->execute();
189    
190            while ( my $row = $sth->fetchrow_hashref() ) {
191                    $row->{'age'} = sprintf("%0.1f", ( (time() - $row->{'date'}) / 86400 ) );
192                    $row->{'size'} = sprintf("%0.2f", $row->{'size'} / 1024 / 1024);
193                    push @ret, $row;
194          }          }
195                
196        return @ret;                return @ret;      
197    }  }
198    
199  sub displayBackupsGrid()  sub displayBackupsGrid()
200    {    {
201        my $retHTML = "";        my $retHTML = "";
202        my $addForm = 1;        my $addForm = 1;
203                
204        if ($addForm)        if ($addForm) {
         {  
205    
206              $retHTML .= <<EOF3;              $retHTML .= <<EOF3;
207  <script language="javascript" type="text/javascript">  <script language="javascript" type="text/javascript">
# Line 268  sub displayBackupsGrid() Line 224  sub displayBackupsGrid()
224  //-->  //-->
225  </script>        </script>      
226  EOF3  EOF3
227                $retHTML .= q{<form name="forma" method="POST" action="}."$MyURL"."?action=burn\"";                $retHTML .= q{<form name="forma" method="GET" action="}."$MyURL"."?action=burn\"";
228                $retHTML.= q{<input type="hidden" value="burn" name="action">};                $retHTML.= q{<input type="hidden" value="burn" name="action">};
229                $retHTML .= q{<input type="hidden" value="results" name="search_results">};                $retHTML .= q{<input type="hidden" value="results" name="search_results">};
230          }          }
231        $retHTML .= "<table style=\"fview\">";          $retHTML .= qq{<table style="fview"><tr>};
232        $retHTML .= "<tr> ";  
233        if ($addForm)          if ($addForm) {
         {  
234              $retHTML .= "<td class=\"tableheader\"><input type=\"checkbox\" name=\"allFiles\" onClick=\"checkAll('allFiles');\"></td>";              $retHTML .= "<td class=\"tableheader\"><input type=\"checkbox\" name=\"allFiles\" onClick=\"checkAll('allFiles');\"></td>";
235          }          }
236        $retHTML .=  "<td class=\"tableheader\">Host</td> <td class=\"tableheader\">Backup no</td> <td class=\"tableheader\">Type</td> <td class=\"tableheader\">date</td></tr>";          $retHTML .=  qq{
237        my @backups = getBackupsNotBurned();                  <td class="tableheader">Host</td>
238        my $backup;                  <td class="tableheader">Backup no</td>
239                    <td class="tableheader">Type</td>
240        if ($addForm)                  <td class="tableheader">date</td>
241          {                  <td class="tableheader">age/days</td>
242              $retHTML .= "<tr>";                  <td class="tableheader">size/MB</td>
243              $retHTML .= "<td colspan=7 style=\"tableheader\">";                  </tr>
244              $retHTML .= "<input type=\"submit\" value=\"Burn selected backups on medium\" name=\"submitBurner\">";          };
245              $retHTML .= "</td>";  
246              $retHTML .= "</tr>";          my @backups = getBackupsNotBurned();
247                        my $backup;
248    
249            if ($addForm) {
250                    $retHTML .= qq{
251                            <tr><td colspan=7 style="tableheader">
252                            <input type="submit" value="Burn selected backups on medium" name="submitBurner">
253                            </td></tr>
254                    };
255          }          }
256        foreach $backup(@backups)  
257          {          foreach $backup(@backups) {
258              my $ftype = "";  
259                    my $ftype = "";
260                            
261              $retHTML .= "<tr>";                  $retHTML .= "<tr>";
262              if ($addForm)                  if ($addForm) {
263                {                          $retHTML .= '<td class="fview"><input type="checkbox" name="fcb' .
264                    $retHTML .= "<td class=\"fview\"> <input type=\"checkbox\" name=\"fcb"                                  $backup->{'hostid'}.'_'.$backup->{'backupno'} .
265                      .$backup->{'hostid'}."_".$backup->{'backupno'}                                  '" value="' . $backup->{'hostid'}.'_'.$backup->{'backupno'} .
266                    ."\" value=\"".$backup->{'hostid'}."_".$backup->{'backupno'}."\"> </td>";                                  '"></td>';
267                }                      }          
268                            
269              $retHTML .= "<td class=\"fviewborder\">" . $backup->{'host'} . "</td>";                  $retHTML .= '<td class="fviewborder">' . $backup->{'host'} . '</td>' .
270              $retHTML .= "<td class=\"fviewborder\">" . $backup->{'backupno'} . "</td>";                          '<td class="fviewborder">' . $backup->{'backupno'} . '</td>' .
271              $retHTML .= "<td class=\"fviewborder\">" . $backup->{'type'} . "</td>";                          '<td class="fviewborder">' . $backup->{'type'} . '</td>' .
272              $retHTML .= "<td class=\"fviewborder\">" . $backup->{'date'} . "<td>";                          '<td class="fviewborder">' . epoch_to_iso( $backup->{'date'} ) . '</td>' .
273              $retHTML .= "</tr>";                          '<td class="fviewborder">' . $backup->{'age'} . '</td>' .
274          }                          '<td class="fviewborder">' . $backup->{'size'} . '</td>' .
275        $retHTML .= "</table>";                          '</tr>';
276        if ($addForm)          }
277         {  
278             $retHTML .= "</form>";          $retHTML .= "</table>";
279         }  
280            if ($addForm) {
281                    $retHTML .= "</form>";
282            }
283                
284        return $retHTML;          return $retHTML;
285      }      
     
   }        
286    
287  sub displayGrid($$$$) {  sub displayGrid($$$$) {
288          my ($where, $addForm, $offset, $hilite) = @_;          my ($where, $addForm, $offset, $hilite) = @_;
289          my $retHTML = "";          my $retHTML = "";
290    
291            my $start_t = time();
292    
293            my ($results, $files) = getFiles($where, $offset);
294    
295            my $dur_t = time() - $start_t;
296            my $dur = sprintf("%0.4fs", $dur_t);
297    
298            my ($from, $to) = (($offset * $on_page) + 1, ($offset * $on_page) + $on_page);
299    
300            if ($results <= 0) {
301                    $retHTML .= qq{
302                            <p style="color: red;">No results found...</p>
303                    };
304                    return $retHTML;
305            } else {
306                    # DEBUG
307                    #use Data::Dumper;
308                    #$retHTML .= '<pre>' . Dumper($files) . '</pre>';
309            }
310    
311    
312          if ($addForm) {          if ($addForm) {
313                  $retHTML .= qq{<form name="forma" method="POST" action="}.$MyURL.qq{?action=search">};                  $retHTML .= qq{<form name="forma" method="GET" action="$MyURL">};
314                  $retHTML.= qq{<input type="hidden" value="search" name="action">};                  $retHTML.= qq{<input type="hidden" value="search" name="action">};
315                  $retHTML .= qq{<input type="hidden" value="results" name="search_results">};                  $retHTML .= qq{<input type="hidden" value="results" name="search_results">};
316          }          }
317    
318    
319          $retHTML .= qq{          $retHTML .= qq{
320            <br/>Found <b>$results files</b> showing <b>$from - $to</b> (took $dur)
321          <table style="fview" width="100%">          <table style="fview" width="100%">
322                  <tr>                  <tr>
323                  <td class="tableheader">Host</td>                  <td class="tableheader">Share</td>
                 <td class="tableheader">Type</td>  
324                  <td class="tableheader">Name</td>                  <td class="tableheader">Name</td>
325                  <td class="tableheader">backup no.</td>                  <td class="tableheader">Type</td>
326                  <td class="tableheader">size</td>                  <td class="tableheader">#</td>
327                  <td class="tableheader">date</td>                  <td class="tableheader">Size</td>
328                    <td class="tableheader">Date</td>
329                  <td class="tableheader">Media</td>                  <td class="tableheader">Media</td>
330                  </tr>                  </tr>
331          };          };
332          my @files = getFiles($where, $offset);  
333          my $file;          my $file;
334    
335          sub hilite_html($$) {          sub hilite_html($$) {
# Line 350  sub displayGrid($$$$) { Line 338  sub displayGrid($$$$) {
338                  return $html;                  return $html;
339          }          }
340    
341          foreach $file (@files) {          sub restore_link($$$$$$) {
342                  my $ftype = "file";                  my $type = shift;
343                  $ftype = "dir" if ($file->{'type'} == BPC_FTYPE_DIR);                  my $action = 'RestoreFile';
344                    $action = 'browse' if (lc($type) eq 'dir');
345                    return sprintf(qq{<a href="?action=%s&host=%s&num=%d&share=%s&dir=%s">%s</a>}, $action, @_);
346            }
347    
348            foreach $file (@{ $files }) {
349                    my $typeStr  = BackupPC::Attrib::fileType2Text(undef, $file->{'type'});
350                  $retHTML .= "<tr>";                  $retHTML .= "<tr>";
351    
352                  foreach my $v ((                  foreach my $v ((
353                          $file->{'hname'},                          $file->{'sharename'},
354                          $ftype,                          qq{<img src="$Conf{CgiImageDirURL}/icon-$typeStr.gif" align="center">&nbsp;} . hilite_html( $file->{'fpath'}, $hilite ),
355                          hilite_html( $file->{'fpath'}, $hilite ),                          $typeStr,
356                          $file->{'backupno'},                          restore_link( $typeStr, $file->{'hname'}, $file->{'backupno'}, $file->{'sname'}, $file->{'fpath'}, $file->{'backupno'} ),
357                          $file->{'size'},                          $file->{'size'},
358                          $file->{'date'},                          epoch_to_iso( $file->{'date'} ),
359                          $file->{'dvd'}                          $file->{'dvd'}
360                  )) {                  )) {
361                          $retHTML .= qq{<td class="fviewborder">$v</td>};                          $retHTML .= qq{<td class="fviewborder">$v</td>};
# Line 372  sub displayGrid($$$$) { Line 365  sub displayGrid($$$$) {
365          }          }
366          $retHTML .= "</table>";          $retHTML .= "</table>";
367    
368          # skip pager          # all variables which has to be transfered
369          return $retHTML;          foreach my $n (qw/search_day_from search_month_from search_year_from search_day_to search_month_to search_year_to search_backup_day_from search_backup_month_from search_backup_year_from search_backup_day_to search_backup_month_to search_backup_year_to search_filename offset/) {
370                    $retHTML .= qq{<INPUT TYPE="hidden" NAME="$n" VALUE="$In{$n}">\n};
371            }
372    
373            my $del = '';
374            my $max_page = int( $results / $on_page );
375            my $page = 0;
376    
377            my $link_fmt = '<a href = "#" onclick="document.forma.offset.value=%d;document.forma.submit();">%s</a>';
378    
379            $retHTML .= '<div style="text-align: center;">';
380    
381          $retHTML .= "<INPUT TYPE=\"hidden\" VALUE=\"\" NAME=\"offset\">";          if ($offset > 0) {
382          for (my $ii = 1; $ii <= $#files; $ii++) {                  $retHTML .= sprintf($link_fmt, $offset - 1, '&lt;&lt;') . ' ';
383                  $retHTML .= "<a href = \"#\" onclick=\"document.forma.offset.value=$ii;document.forma.submit();\">$ii</a>";          }
384                  if ($ii < $#files) {  
385                          $retHTML .= " | ";          while ($page <= $max_page) {
386                    if ($page == $offset) {
387                            $retHTML .= $del . '<b>' . ($page + 1) . '</b>';
388                    } else {
389                            $retHTML .= $del . sprintf($link_fmt, $page, $page + 1);
390                  }                  }
391    
392                    if ($page < $offset - $pager_pages && $page != 0) {
393                            $retHTML .= " ... ";
394                            $page = $offset - $pager_pages;
395                            $del = '';
396                    } elsif ($page > $offset + $pager_pages && $page != $max_page) {
397                            $retHTML .= " ... ";
398                            $page = $max_page;
399                            $del = '';
400                    } else {
401                            $del = ' | ';
402                            $page++;
403                    }
404            }
405    
406            if ($offset < $max_page) {
407                    $retHTML .= ' ' . sprintf($link_fmt, $offset + 1, '&gt;&gt;');
408          }          }
409    
410            $retHTML .= "</div>";
411    
412          $retHTML .= "</form>" if ($addForm);          $retHTML .= "</form>" if ($addForm);
413          
414          return $retHTML;          return $retHTML;
415  }  }
416    

Legend:
Removed from v.17  
changed lines
  Added in v.72

  ViewVC Help
Powered by ViewVC 1.1.26