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

Legend:
Removed from v.17  
changed lines
  Added in v.86

  ViewVC Help
Powered by ViewVC 1.1.26