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

Legend:
Removed from v.9  
changed lines
  Added in v.55

  ViewVC Help
Powered by ViewVC 1.1.26