/[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 64 by dpavlin, Sun Aug 21 17:08:55 2005 UTC revision 124 by dpavlin, Tue Sep 20 16:23:04 2005 UTC
# Line 15  my $pager_pages = 10; Line 15  my $pager_pages = 10;
15  my $dsn = $Conf{SearchDSN};  my $dsn = $Conf{SearchDSN};
16  my $db_user = $Conf{SearchUser} || '';  my $db_user = $Conf{SearchUser} || '';
17    
18    my $hest_index_path = $Conf{HyperEstraierIndex};
19    
20    my $dbh;
21    
22    sub get_dbh {
23            $dbh ||= DBI->connect($dsn, $db_user, "", { RaiseError => 1, AutoCommit => 1 } );
24            return $dbh;
25    }
26    
27  sub getUnits() {  sub getUnits() {
28          my @ret;          my @ret;
29    
30          my $dbh = DBI->connect($dsn, $db_user, "", { RaiseError => 1, AutoCommit => 1 } );          my $dbh = get_dbh();
31          my $sth = $dbh->prepare(qq{ SELECT id, share FROM shares} );          my $sth = $dbh->prepare(qq{
32                    SELECT
33                            shares.id       as id,
34                            hosts.name || ':' || shares.name as share
35                    FROM shares
36                    JOIN hosts on hostid = hosts.id
37                    ORDER BY share
38            } );
39          $sth->execute();          $sth->execute();
40          push @ret, { 'id' => '', 'share' => '-'};       # dummy any          push @ret, { 'id' => '', 'share' => '-'};       # dummy any
41    
42          while ( my $row = $sth->fetchrow_hashref() ) {          while ( my $row = $sth->fetchrow_hashref() ) {
43                  push @ret, $row;                  push @ret, $row;
44          }          }
         $dbh->disconnect();  
45          return @ret;          return @ret;
46  }  }
47    
48  sub epoch_to_iso {  sub epoch_to_iso {
49          my $t = shift || return;          my $t = shift || return;
50          $t += 60 * 60 * +2;     # FIXME add TZ          my $iso = BackupPC::Lib::timeStamp(undef, $t);
51          my $dt = DateTime->from_epoch( epoch => $t ) || return;          $iso =~ s/\s/ /g;
52          print STDERR "BUG: $t != " . $dt->epoch . "\n" unless ($t == $dt->epoch);          return $iso;
         return $dt->ymd . ' ' . $dt->hms;  
53  }  }
54    
55  sub getWhere($) {  sub dates_from_form($) {
56          my ($param)    = @_;          my $param = shift || return;
         my @conditions;  
57    
58          sub mk_epoch_date($$) {          sub mk_epoch_date($$) {
59                  my ($name,$suffix) = @_;                  my ($name,$suffix) = @_;
60    
61                  my $yyyy = $param->{ $name . '_year_' . $suffix} || return;                  my $yyyy = $param->{ $name . '_year_' . $suffix} || return undef;
62                  my $mm .= $param->{ $name . '_month_' . $suffix} ||                  my $mm .= $param->{ $name . '_month_' . $suffix} ||
63                          ( $suffix eq 'from' ? 1 : 12);                          ( $suffix eq 'from' ? 1 : 12);
64                  my $dd .= $param->{ $name . '_day_' . $suffix} ||                  my $dd .= $param->{ $name . '_day_' . $suffix} ||
65                          ( $suffix eq 'from' ? 1 : 31);                          ( $suffix eq 'from' ? 1 : 31);
66    
67                    $yyyy =~ s/\D//g;
68                    $mm =~ s/\D//g;
69                    $dd =~ s/\D//g;
70    
71                  my $dt = new DateTime(                  my $dt = new DateTime(
72                          year => $yyyy,                          year => $yyyy,
73                          month => $mm,                          month => $mm,
74                          day => $dd                          day => $dd
75                  );                  );
76                    print STDERR "mk_epoch_date($name,$suffix) [$yyyy-$mm-$dd] = " . $dt->ymd . " " . $dt->hms . "\n";
77                  return $dt->epoch || 'NULL';                  return $dt->epoch || 'NULL';
78          }          }
79    
80          my $backup_from = mk_epoch_date('search_backup', 'from');          my @ret = (
81                    mk_epoch_date('search_backup', 'from'),
82                    mk_epoch_date('search_backup', 'to'),
83                    mk_epoch_date('search', 'from'),
84                    mk_epoch_date('search', 'to'),
85            );
86    
87            return @ret;
88    
89    }
90    
91    
92    sub getWhere($) {
93            my $param = shift || return;
94    
95            my ($backup_from, $backup_to, $files_from, $files_to) = dates_from_form($param);
96    
97            my @conditions;
98          push @conditions, qq{ backups.date >= $backup_from } if ($backup_from);          push @conditions, qq{ backups.date >= $backup_from } if ($backup_from);
         my $backup_to = mk_epoch_date('search_backup', 'to');  
99          push @conditions, qq{ backups.date <= $backup_to } if ($backup_to);          push @conditions, qq{ backups.date <= $backup_to } if ($backup_to);
   
         my $files_from = mk_epoch_date('search', 'from');  
100          push @conditions, qq{ files.date >= $files_from } if ($files_from);          push @conditions, qq{ files.date >= $files_from } if ($files_from);
         my $files_to = mk_epoch_date('search', 'to');  
101          push @conditions, qq{ files.date <= $files_to } if ($files_to);          push @conditions, qq{ files.date <= $files_to } if ($files_to);
102    
103          print STDERR "backup: $backup_from - $backup_to files: $files_from - $files_to cond:" . join(" | ",@conditions);          print STDERR "backup: $backup_from - $backup_to files: $files_from - $files_to cond:" . join(" | ",@conditions);
       
         push( @conditions, ' files.shareid = ' . $param->{'search_share'} ) if ($param->{'search_share'});  
104    
105            push( @conditions, ' files.shareid = ' . $param->{'search_share'} ) if ($param->{'search_share'});
106          push (@conditions, " upper(files.path) LIKE upper('%".$param->{'search_filename'}."%')") if ($param->{'search_filename'});          push (@conditions, " upper(files.path) LIKE upper('%".$param->{'search_filename'}."%')") if ($param->{'search_filename'});
107    
108          return (          return join(" and ", @conditions);
                 join(" and ", @conditions),  
                 $files_from, $files_to,  
                 $backup_from, $backup_to  
         );  
109  }  }
110    
111    
112  sub getFiles($$) {  sub getFiles($) {
113          my ($where, $offset) = @_;          my ($param) = @_;
114    
115            my $offset = $param->{'offset'} || 0;
116            $offset *= $on_page;
117    
118          my $dbh = DBI->connect($dsn, $db_user, "", { RaiseError => 1, AutoCommit => 1 } );          my $dbh = get_dbh();
119    
120          my $sql_cols = qq{          my $sql_cols = qq{
121                  files.id                        AS fid,                  files.id                        AS fid,
122                  hosts.name                      AS hname,                  hosts.name                      AS hname,
123                  shares.name                     AS sname,                  shares.name                     AS sname,
124                  shares.share                    AS sharename,                  files.backupnum                 AS backupnum,
                 files.backupNum                 AS backupNum,  
                 files.name                      AS filename,  
125                  files.path                      AS filepath,                  files.path                      AS filepath,
126                  files.date                      AS date,                  files.date                      AS date,
127                  files.type                      AS filetype,                  files.type                      AS type,
128                  files.size                      AS size,                  files.size                      AS size
                 dvds.name                       AS dvd  
129          };          };
130    
131          my $sql_from = qq{          my $sql_from = qq{
132                  FROM files                  FROM files
133                          INNER JOIN shares       ON files.shareID=shares.ID                          INNER JOIN shares       ON files.shareID=shares.ID
134                          INNER JOIN hosts        ON hosts.ID = shares.hostID                          INNER JOIN hosts        ON hosts.ID = shares.hostID
135                          INNER JOIN backups      ON backups.num = files.backupNum and backups.hostID = hosts.ID                          INNER JOIN backups      ON backups.num = files.backupnum and backups.hostID = hosts.ID AND backups.shareID = files.shareID
         };  
   
         my $sql_dvd_from = qq{  
                         LEFT  JOIN dvds         ON dvds.ID = files.dvdid  
136          };          };
137    
138          my $sql_where;          my $sql_where;
139            my $where = getWhere($param);
140          $sql_where = " WHERE ". $where if ($where);          $sql_where = " WHERE ". $where if ($where);
141    
142          my $sql_order = qq{          my $sql_order = qq{
# Line 122  sub getFiles($$) { Line 146  sub getFiles($$) {
146          };          };
147    
148          my $sql_count = qq{ select count(files.id) $sql_from $sql_where };          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 };          my $sql_results = qq{ select $sql_cols $sql_from $sql_where $sql_order };
   
         $offset ||= 0;  
         $offset = ($offset * $on_page);  
150    
151          my $sth = $dbh->prepare($sql_count);          my $sth = $dbh->prepare($sql_count);
152          $sth->execute();          $sth->execute();
# Line 143  sub getFiles($$) { Line 164  sub getFiles($$) {
164          my @ret;          my @ret;
165                
166          while (my $row = $sth->fetchrow_hashref()) {          while (my $row = $sth->fetchrow_hashref()) {
167                  push(@ret, {                  push @ret, $row;
                         'hname'         => $row->{'hname'},  
                         'sname'         => $row->{'sname'},  
                         'sharename'     => $row->{'sharename'},  
                         'backupno'      => $row->{'backupnum'},  
                         'fname'         => $row->{'filename'},  
                         'fpath'         => $row->{'filepath'},  
                         'networkpath'   => $row->{'networkpath'},  
                         'date'          => $row->{'date'},  
                         'type'          => $row->{'filetype'},  
                         'size'          => $row->{'size'},  
                         'id'            => $row->{'fid'},  
                         'dvd'           => $row->{'dvd'}  
                 });  
168          }          }
169            
170          $sth->finish();          $sth->finish();
         $dbh->disconnect();  
171          return ($results, \@ret);          return ($results, \@ret);
172  }  }
173    
174    sub getHyperEstraier_url($) {
175            my ($use_hest) = @_;
176    
177            return unless $use_hest;
178    
179            use HyperEstraier;
180            my ($index_path, $index_node_url);
181    
182            if ($use_hest =~ m#^http://#) {
183                    $index_node_url = $use_hest;
184            } else {
185                    $index_path = $TopDir . '/' . $index_path;
186                    $index_path =~ s#//#/#g;
187            }
188            return ($index_path, $index_node_url);
189    }
190    
191    sub getFilesHyperEstraier($) {
192            my ($param) = @_;
193    
194            my $offset = $param->{'offset'} || 0;
195            $offset *= $on_page;
196    
197            die "no index_path?" unless ($hest_index_path);
198    
199            use HyperEstraier;
200    
201            my ($index_path, $index_node_url) = getHyperEstraier_url($hest_index_path);
202    
203            # open the database
204            my $db;
205            if ($index_path) {
206                    $db = HyperEstraier::Database->new();
207                    $db->open($index_path, $HyperEstraier::ESTDBREADER);
208            } elsif ($index_node_url) {
209                    $db ||= HyperEstraier::Node->new($index_node_url);
210                    $db->set_auth('admin', 'admin');
211            } else {
212                    die "BUG: unimplemented";
213            }
214    
215            # create a search condition object
216            my $cond = HyperEstraier::Condition->new();
217    
218            my $q = $param->{'search_filename'};
219            my $shareid = $param->{'search_share'};
220    
221            if (length($q) > 0) {
222                    # exact match
223                    $cond->add_attr("filepath ISTRINC $q");
224    
225                    $q =~ s/(.)/$1 /g;
226                    # set the search phrase to the search condition object
227                    $cond->set_phrase($q);
228            }
229    
230            my ($backup_from, $backup_to, $files_from, $files_to) = dates_from_form($param);
231    
232            $cond->add_attr("backup_date NUMGE $backup_from") if ($backup_from);
233            $cond->add_attr("backup_date NUMLE $backup_to") if ($backup_to);
234    
235            $cond->add_attr("date NUMGE $files_from") if ($files_from);
236            $cond->add_attr("date NUMLE $files_to") if ($files_to);
237    
238            $cond->add_attr("shareid NUMEQ $shareid") if ($shareid);
239    
240    #       $cond->set_max( $offset + $on_page );
241            $cond->set_options( $HyperEstraier::Condition::SURE );
242            $cond->set_order( 'date NUMA' );
243    
244            # get the result of search
245            my @res;
246            my ($result, $hits);
247    
248            if ($index_path) {
249                    $result = $db->search($cond, 0);
250                    $hits = $result->size;
251            } elsif ($index_node_url) {
252                    $result = $db->search($cond, 0);
253                    $hits = $result->doc_num;
254            } else {
255                    die "BUG: unimplemented";
256            }
257    
258            # for each document in result
259            for my $i ($offset .. ($offset + $on_page - 1)) {
260                    last if ($i >= $hits);
261    
262                    my $doc;
263                    if ($index_path) {
264                            my $id = $result->get($i);
265                            $doc = $db->get_doc($id, 0);
266                    } elsif ($index_node_url) {
267                            $doc = $result->get_doc($i);
268                    } else {
269                            die "BUG: unimplemented";
270                    }
271    
272                    my $row;
273                    foreach my $c (qw/fid hname sname backupnum fiilename filepath date type size/) {
274                            $row->{$c} = $doc->attr($c);
275                    }
276                    push @res, $row;
277            }
278    
279            return ($hits, \@res);
280    }
281    
282    sub getGzipName($$$)
283    {
284            my ($host, $share, $backupnum) = @_;
285            my $ret = $Conf{GzipSchema};
286            
287            $share =~ s/\//_/g;
288            $ret =~ s/\\h/$host/ge;
289            $ret =~ s/\\s/$share/ge;
290            $ret =~ s/\\n/$backupnum/ge;
291            
292            return $ret;
293            
294    }
295    
296  sub getBackupsNotBurned() {  sub getBackupsNotBurned() {
297    
298          my $dbh = DBI->connect($dsn, $db_user, "", { RaiseError => 1, AutoCommit => 1 } );          my $dbh = get_dbh();
299          my $sql = q{  
300          SELECT          my $sql = q{
301                  hosts.ID                AS hostid,                  SELECT
302                  min(hosts.name)         AS host,                          backups.hostID AS hostID,
303                  backups.num             AS backupno,                          hosts.name AS host,
304                  min(backups.type)       AS type,                          shares.name AS share,
305                  min(backups.date)       AS date                          backups.id AS backupnum,
306          FROM backups, shares, files, hosts                          backups.type AS type,
307          WHERE                          backups.date AS date,
308                  backups.num     = files.backupNum       AND                          backups.size AS size
309                  shares.ID       = files.shareID         AND                          FROM backups
310                  backups.hostID  = shares.hostID         AND                  INNER JOIN shares       ON backups.shareID=shares.ID
311                  hosts.ID        = backups.hostID        AND                  INNER JOIN hosts        ON backups.hostID = hosts.ID
312                  files.dvdid     IS NULL                  LEFT OUTER JOIN archive_backup ON archive_backup.backup_id = backups.id AND archive_backup.backup_id IS NULL
313          GROUP BY                  WHERE backups.size > 0
314                  backups.hostID, backups.num, hosts.id                  GROUP BY
315          ORDER BY min(backups.date)                          backups.hostID,
316                            hosts.name,
317                            shares.name,
318                            backups.num,
319                            backups.shareid,
320                            backups.id,
321                            backups.type,
322                            backups.date,
323                            backups.size
324                    ORDER BY backups.date
325          };          };
326          my $sth = $dbh->prepare( $sql );          my $sth = $dbh->prepare( $sql );
327          my @ret;          my @ret;
328          $sth->execute();          $sth->execute();
329    
330          while ( my $row = $sth->fetchrow_hashref() ) {                while ( my $row = $sth->fetchrow_hashref() ) {
331                  push(@ret, {                  $row->{'age'} = sprintf("%0.1f", ( (time() - $row->{'date'}) / 86400 ) );
332                           'host'         => $row->{'host'},                  $row->{'size'} = sprintf("%0.2f", $row->{'size'} / 1024 / 1024);
333                           'hostid'       => $row->{'hostid'},                  my (undef,undef,undef,undef,undef,undef,undef,$fs_size,undef,undef,undef,undef,undef) =
334                           'backupno'     => $row->{'backupno'},                          stat( $Conf{InstallDir}.'/'.$Conf{GzipTempDir}.'/'.
335                           'type'         => $row->{'type'},                                  getGzipName($row->{'host'}, $row->{share}, $row->{'backupnum'}));
336                           'date'         => $row->{'date'},                  $row->{'fs_size'} = $fs_size;
337                           'age'          => sprintf("%0.1f", ( (time() - $row->{'date'}) / 86400 ) ),                  push @ret, $row;
                        }  
                 );  
338          }          }
339                
340          return @ret;                return @ret;      
# Line 207  sub getBackupsNotBurned() { Line 343  sub getBackupsNotBurned() {
343  sub displayBackupsGrid()  sub displayBackupsGrid()
344    {    {
345        my $retHTML = "";        my $retHTML = "";
       my $addForm = 1;  
346                
347        if ($addForm) {          $retHTML .= <<EOF3;
   
             $retHTML .= <<EOF3;  
348  <script language="javascript" type="text/javascript">  <script language="javascript" type="text/javascript">
349  <!--  <!--
350    
# Line 229  sub displayBackupsGrid() Line 362  sub displayBackupsGrid()
362          }          }
363        }        }
364      }      }
365        
366        function sumiraj()
367        {
368            var suma = 0;
369            for (var i = 0; i < document.forma.elements.length; i++)    
370                    {
371                            var e = document.forma.elements[i];
372                            if ((e.checked || !e.checked) && e.name != \'all\')
373                            {
374                                    if (e.checked)
375                                    {
376                                            var ret = e.name.match("fcb(.*)");
377                                            suma += parseInt(eval("document.forma.fss"+ret[1]+".value") || 0);
378                                            
379                                    }
380                            }
381            }
382            document.forma.totalsize.value = suma;
383            return suma;
384        }
385  //-->  //-->
386  </script>        </script>      
387  EOF3  EOF3
388                $retHTML .= q{<form name="forma" method="GET" action="}."$MyURL"."?action=burn\"";          $retHTML .= q{
389                $retHTML.= q{<input type="hidden" value="burn" name="action">};                  <form name="forma" method="GET" action=};
390                $retHTML .= q{<input type="hidden" value="results" name="search_results">};                  $retHTML .= "\"".$MyURL."\"";
391          }                  $retHTML .= q{?action=burn>
392          $retHTML .= qq{<table style="fview"><tr>};                          <input type="hidden" value="burn" name="action">
393                            <input type="hidden" value="results" name="search_results">
394          if ($addForm) {                          <table style="fview" border="0" cellspacing="0" cellpadding="2">
395              $retHTML .= "<td class=\"tableheader\"><input type=\"checkbox\" name=\"allFiles\" onClick=\"checkAll('allFiles');\"></td>";                          <tr class="tableheader">
396          }                          <td class="tableheader">
397          $retHTML .=  qq{                                  <input type="checkbox" name="allFiles" onClick="checkAll('allFiles');">
398                  <td class="tableheader">Host</td>                          </td>
399                  <td class="tableheader">Backup no</td>                          <td align="center">Share</td>
400                  <td class="tableheader">Type</td>                          <td align="center">Backup no</td>
401                  <td class="tableheader">date</td>                          <td align="center">Type</td>
402                  <td class="tableheader">age/days</td>                          <td align="center">date</td>
403                  </tr>                          <td align="center">age/days</td>
404          };                          <td align="center">size/MB</td>
405                            <td align="center">gzip size</td>
406          my @backups = getBackupsNotBurned();                          </tr>
         my $backup;  
407    
         if ($addForm) {  
                 $retHTML .= qq{  
408                          <tr><td colspan=7 style="tableheader">                          <tr><td colspan=7 style="tableheader">
409                          <input type="submit" value="Burn selected backups on medium" name="submitBurner">                          <input type="submit" value="Burn selected backups on medium" name="submitBurner">
410                          </td></tr>                          </td></tr>
411                  };          };
412          }  
413            my @color = (' bgcolor="#e0e0e0"', '');
414    
415          foreach $backup(@backups) {          my $i = 0;
416            my $host = '';
417    
418            foreach my $backup ( getBackupsNotBurned() ) {
419    
420                    if ($host ne $backup->{'host'}) {
421                            $i++;
422                            $host = $backup->{'host'};
423                    }
424                  my $ftype = "";                  my $ftype = "";
425                            
426                  $retHTML .= "<tr>";                  $retHTML .= "<tr" . $color[$i %2 ] . ">";
427                  if ($addForm) {                  $retHTML .= '<td class="fview"><input type="checkbox" name="fcb' .
428                          $retHTML .= '<td class="fview"><input type="checkbox" name="fcb' .                                                                                          $backup->{'hostid'}.'_'.$backup->{'backupnum'} .
429                                  $backup->{'hostid'}.'_'.$backup->{'backupno'} .                                                                                          '" value="' . $backup->{'hostid'}.'_'.$backup->{'backupnum'} .
430                                  '" value="' . $backup->{'hostid'}.'_'.$backup->{'backupno'} .                                                                                          '" onClick="sumiraj();"></td>';
                                 '"></td>';  
                 }            
431                            
432                  $retHTML .= '<td class="fviewborder">' . $backup->{'host'} . '</td>' .                  $retHTML .=
433                          '<td class="fviewborder">' . $backup->{'backupno'} . '</td>' .                          '<td align="right">' . $backup->{'host'} . ':' . $backup->{'share'} . '</td>' .
434                          '<td class="fviewborder">' . $backup->{'type'} . '</td>' .                          '<td align="center">' . $backup->{'backupnum'} . '</td>' .
435                          '<td class="fviewborder">' . epoch_to_iso( $backup->{'date'} ) . '</td>' .                          '<td align="center">' . $backup->{'type'} . '</td>' .
436                          '<td class="fviewborder">' . $backup->{'age'} . '</td>' .                          '<td align="center">' . epoch_to_iso( $backup->{'date'} ) . '</td>' .
437                          '</tr>';                          '<td align="center">' . $backup->{'age'} . '</td>' .
438          }                          '<td align="right">' . $backup->{'size'} . '</td>' .
439                            '<td align="right">' . $backup->{'fs_size'} .
440                            '<input type="hidden" name="fss'.$backup->{'hostid'}.'_'.$backup->{'backupnum'} . '"'.
441                            'value="'. $backup->{'fs_size'} .'"'.'</td>' .
442                            "</tr>\n";
443    
         $retHTML .= "</table>";  
444    
         if ($addForm) {  
                 $retHTML .= "</form>";  
445          }          }
446    
447            $retHTML .= "</table>";
448            $retHTML .= "total gzip size:<input type=\"text\" name=\"totalsize\"><br>";
449            $retHTML .= "Note:<input type=\"text\" name=\"note\">";
450            $retHTML .= "</form>";
451                
452          return $retHTML;          return $retHTML;
453  }        }      
454    
455  sub displayGrid($$$$) {  sub displayGrid($) {
456          my ($where, $addForm, $offset, $hilite) = @_;          my ($param) = @_;
457    
458            my $offset = $param->{'offset'};
459            my $hilite = $param->{'search_filename'};
460    
461          my $retHTML = "";          my $retHTML = "";
462    
463          my $start_t = time();          my $start_t = time();
464    
465          my ($results, $files) = getFiles($where, $offset);          my ($results, $files);
466            if ($param->{'use_hest'} && length($hilite) > 0) {
467                    ($results, $files) = getFilesHyperEstraier($param);
468            } else {
469                    ($results, $files) = getFiles($param);
470            }
471    
472          my $dur_t = time() - $start_t;          my $dur_t = time() - $start_t;
473          my $dur = sprintf("%0.4fs", $dur_t);          my $dur = sprintf("%0.4fs", $dur_t);
# Line 315  sub displayGrid($$$$) { Line 486  sub displayGrid($$$$) {
486          }          }
487    
488    
         if ($addForm) {  
                 $retHTML .= qq{<form name="forma" method="GET" action="$MyURL">};  
                 $retHTML.= qq{<input type="hidden" value="search" name="action">};  
                 $retHTML .= qq{<input type="hidden" value="results" name="search_results">};  
         }  
   
   
489          $retHTML .= qq{          $retHTML .= qq{
490          <br/>Found <b>$results files</b> showing <b>$from - $to</b> (took $dur)          <div>
491          <table style="fview" width="100%">          Found <b>$results files</b> showing <b>$from - $to</b> (took $dur)
492                  <tr>          </div>
493                  <td class="tableheader">Share</td>          <table style="fview" width="100%" border="0" cellpadding="2" cellspacing="0">
494                  <td class="tableheader">Name</td>                  <tr class="fviewheader">
495                  <td class="tableheader">Type</td>                  <td></td>
496                  <td class="tableheader">#</td>                  <td align="center">Share</td>
497                  <td class="tableheader">Size</td>                  <td align="center">Type and Name</td>
498                  <td class="tableheader">Date</td>                  <td align="center">#</td>
499                  <td class="tableheader">Media</td>                  <td align="center">Size</td>
500                    <td align="center">Date</td>
501                    <td align="center">Media</td>
502                  </tr>                  </tr>
503          };          };
504    
# Line 351  sub displayGrid($$$$) { Line 517  sub displayGrid($$$$) {
517                  return sprintf(qq{<a href="?action=%s&host=%s&num=%d&share=%s&dir=%s">%s</a>}, $action, @_);                  return sprintf(qq{<a href="?action=%s&host=%s&num=%d&share=%s&dir=%s">%s</a>}, $action, @_);
518          }          }
519    
520            my $i = $offset * $on_page;
521    
522          foreach $file (@{ $files }) {          foreach $file (@{ $files }) {
523                    $i++;
524    
525                  my $typeStr  = BackupPC::Attrib::fileType2Text(undef, $file->{'type'});                  my $typeStr  = BackupPC::Attrib::fileType2Text(undef, $file->{'type'});
526                  $retHTML .= "<tr>";                  $retHTML .= qq{<tr class="fviewborder">};
527    
528                  foreach my $v ((                  $retHTML .= qq{<td class="fviewborder">$i</td>};
529                          $file->{'sharename'},  
530                          qq{<img src="$Conf{CgiImageDirURL}/icon-$typeStr.gif" align="center">&nbsp;} . hilite_html( $file->{'fpath'}, $hilite ),                  $retHTML .=
531                          $typeStr,                          qq{<td class="fviewborder" align="right">} . $file->{'hname'} . ':' . $file->{'sname'} . qq{</td>} .
532                          restore_link( $typeStr, $file->{'hname'}, $file->{'backupno'}, $file->{'sname'}, $file->{'fpath'}, $file->{'backupno'} ),                          qq{<td class="fviewborder"><img src="$Conf{CgiImageDirURL}/icon-$typeStr.gif" alt="$typeStr" align="middle">&nbsp;} . hilite_html( $file->{'filepath'}, $hilite ) . qq{</td>} .
533                          $file->{'size'},                          qq{<td class="fviewborder" align="center">} . restore_link( $typeStr, ${EscURI( $file->{'hname'} )}, $file->{'backupnum'}, ${EscURI( $file->{'sname'})}, ${EscURI( $file->{'filepath'} )}, $file->{'backupnum'} ) . qq{</td>} .
534                          epoch_to_iso( $file->{'date'} ),                          qq{<td class="fviewborder" align="right">} . $file->{'size'} . qq{</td>} .
535                          $file->{'dvd'}                          qq{<td class="fviewborder">} . epoch_to_iso( $file->{'date'} ) . qq{</td>} .
536                  )) {                          qq{<td class="fviewborder">} . '?' . qq{</td>};
                         $retHTML .= qq{<td class="fviewborder">$v</td>};  
                 }  
537    
538                  $retHTML .= "</tr>";                  $retHTML .= "</tr>";
539          }          }
# Line 380  sub displayGrid($$$$) { Line 548  sub displayGrid($$$$) {
548          my $max_page = int( $results / $on_page );          my $max_page = int( $results / $on_page );
549          my $page = 0;          my $page = 0;
550    
551          my $link_fmt = '<a href = "#" onclick="document.forma.offset.value=%d;document.forma.submit();">%s</a>';          sub page_link($$$) {
552                    my ($param,$page,$display) = @_;
553    
554                    $param->{'offset'} = $page;
555    
556                    my $html = '<a href = "' . $MyURL;
557                    my $del = '?';
558                    foreach my $k (keys %{ $param }) {
559                            if ($param->{$k}) {
560                                    $html .= $del . $k . '=' . ${EscURI( $param->{$k} )};
561                                    $del = '&';
562                            }
563                    }
564                    $html .= '">' . $display . '</a>';
565            }
566    
567          $retHTML .= '<div style="text-align: center;">';          $retHTML .= '<div style="text-align: center;">';
568    
569          if ($offset > 0) {          if ($offset > 0) {
570                  $retHTML .= sprintf($link_fmt, $offset - 1, '&lt;&lt;') . ' ';                  $retHTML .= page_link($param, $offset - 1, '&lt;&lt;') . ' ';
571          }          }
572    
573          while ($page <= $max_page) {          while ($page <= $max_page) {
574                  if ($page == $offset) {                  if ($page == $offset) {
575                          $retHTML .= $del . '<b>' . ($page + 1) . '</b>';                          $retHTML .= $del . '<b>' . ($page + 1) . '</b>';
576                  } else {                  } else {
577                          $retHTML .= $del . sprintf($link_fmt, $page, $page + 1);                          $retHTML .= $del . page_link($param, $page, $page + 1);
578                  }                  }
579    
580                  if ($page < $offset - $pager_pages && $page != 0) {                  if ($page < $offset - $pager_pages && $page != 0) {
# Line 410  sub displayGrid($$$$) { Line 592  sub displayGrid($$$$) {
592          }          }
593    
594          if ($offset < $max_page) {          if ($offset < $max_page) {
595                  $retHTML .= ' ' . sprintf($link_fmt, $offset + 1, '&gt;&gt;');                  $retHTML .= ' ' . page_link($param, $offset + 1, '&gt;&gt;');
596          }          }
597    
598          $retHTML .= "</div>";          $retHTML .= "</div>";
599    
         $retHTML .= "</form>" if ($addForm);  
   
600          return $retHTML;          return $retHTML;
601  }  }
602    

Legend:
Removed from v.64  
changed lines
  Added in v.124

  ViewVC Help
Powered by ViewVC 1.1.26