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

Legend:
Removed from v.26  
changed lines
  Added in v.79

  ViewVC Help
Powered by ViewVC 1.1.26