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

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

  ViewVC Help
Powered by ViewVC 1.1.26