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

Legend:
Removed from v.6  
changed lines
  Added in v.83

  ViewVC Help
Powered by ViewVC 1.1.26