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

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

  ViewVC Help
Powered by ViewVC 1.1.26