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

Legend:
Removed from v.4  
changed lines
  Added in v.85

  ViewVC Help
Powered by ViewVC 1.1.26