/[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 51 by dpavlin, Sat Aug 20 16:40:11 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    
11    my $on_page = 100;
12    my $pager_pages = 10;
13    
14    my $dsn = $Conf{SearchDSN};
15    my $db_user = $Conf{SearchUser} || '';
16    
17  sub getUnits() {  sub getUnits() {
18      my @ret = ();      my @ret = ();
19      my $tmp;      my $tmp;
20      my $dbh = DBI->connect( "dbi:SQLite:dbname=${TopDir}/$Conf{SearchDB}",      my $dbh = DBI->connect($dsn, $db_user, "", { RaiseError => 1, AutoCommit => 1 } );
         "", "", { RaiseError => 1, AutoCommit => 1 } );  
21      my $st =      my $st =
22        $dbh->prepare(        $dbh->prepare(
23          " SELECT shares.ID AS ID, shares.share AS name FROM shares;");          " SELECT shares.ID AS ID, shares.share AS name FROM shares;");
# Line 24  sub getUnits() { Line 30  sub getUnits() {
30      return @ret;      return @ret;
31  }  }
32    
33  sub getWhere($) {  sub epoch_to_iso {
34      my ($param)    = @_;          my $t = shift || return;
35      my $retSQL     = "";          my $dt = DateTime->from_epoch( epoch => $t ) || return;
36      my @conditions = ();  print STDERR "$t == ",$dt->epoch,"\n";
37      my $cond;          return $dt->ymd . ' ' . $dt->hms;
38    }
39    
40        sub getWhere($) {
41              my ($param)    = @_;
42                my @conditions;
     if ( defined( $param->{'search_backup_day_from'} ) && $param->{'search_backup_day_from'} ne "") {  
         push( @conditions,  
             ' strftime("%d", datetime(backups.date, "unixepoch","localtime")) >= "'  
               . $param->{'search_backup_day_from'} ."\"");  
     }  
     if ( defined( $param->{'search_backup_day_to'} ) && $param->{'search_backup_day_to'} ne "") {  
         push( @conditions,  
             ' strftime("%d", datetime(backups.date, "unixepoch","localtime")) <= "'  
               . $param->{'search_backup_day_from'}  ."\"");  
     }  
     if ( defined( $param->{'search_backup_month_from'} ) && $param->{'search_backup_month_from'} ne "") {  
         push( @conditions,  
             ' strftime("%m", datetime(backups.date, "unixepoch","localtime")) >= "'  
               . $param->{'search_backup_month_from'}  ."\"");  
     }  
     if ( defined( $param->{'search_backup_month_to'} ) && $param->{'search_backup_month_to'} ne "") {  
         push( @conditions,  
             ' strftime("%m", datetime(backups.date, "unixepoch","localtime")) <= "'  
               . $param->{'search_backup_month_to'}  ."\"");  
     }  
     if ( defined( $param->{'search_backup_year_from'} ) && $param->{'search_backup_year_from'} ne "") {  
         push( @conditions,  
             ' strftime("%Y", datetime(backups.date, "unixepoch","localtime")) >= "'  
               . $param->{'search_backup_year_from'}  ."\"");  
     }  
     if ( defined( $param->{'search_backup_year_to'} ) && $param->{'search_backup_year_to'} ne "") {  
         push( @conditions,  
             ' strftime("%Y", datetime(backups.date, "unixepoch","localtime")) <= "'  
               . $param->{'search_backup_year_to'}  ."\"");  
     }  
43    
44      if ( defined( $param->{'search_day_from'} )   && $param->{'search_day_from'} ne "" ) {          sub mk_epoch_date($$) {
45          push( @conditions,                  my ($name,$suffix) = @_;
             ' strftime("%d", datetime(files.date, "unixepoch","localtime")) >= "'  
               . $param->{'search_day_from'}  ."\"");  
     }  
     if ( defined( $param->{'search_month_from'} ) && $param->{'search_month_from'} ne "") {  
         push( @conditions,  
             ' strftime("%m", datetime(files.date, "unixepoch","localtime")) >= "'  
               . $param->{'search_month_from'}  ."\"");  
     }  
     if ( defined( $param->{'search_year_from'} ) && $param->{'search_year_from'} ne "") {  
         push( @conditions,  
             ' strftime("%Y", datetime(files.date, "unixepoch","localtime")) >= "'  
               . $param->{'search_year_from'}  ."\"");  
     }  
     if ( defined( $param->{'search_day_to'} )   && $param->{'search_day_to'} ne "" ) {  
         push( @conditions,  
             ' strftime("%d", datetime(files.date, "unixepoch","localtime")) <= "'  
               . $param->{'search_day_to'}  ."\"");  
     }  
     if ( defined( $param->{'search_month_to'} ) && $param->{'search_month_to'} ne "" ) {  
         push( @conditions,  
             ' strftime("%m", datetime(files.date, "unixepoch","localtime")) <= "'  
               . $param->{'search_month_to'} ."\"" );  
     }  
     if ( defined( $param->{'search_year_to'} )&& $param->{'search_year_to'} ne "" )  {  
         push( @conditions,  
             ' strftime("%Y", datetime(files.date, "unixepoch","localtime")) <= "'  
               . $param->{'search_year_to'} ."\"");  
     }  
46    
47      if ( defined( $param->{'search_host'} ) && $param->{'search_host'} ne "") {                  my $yyyy = $param->{ $name . '_year_' . $suffix} || return;
48        push( @conditions, ' backups.hostID = ' . $param->{'search_host'} );                  my $mm .= $param->{ $name . '_month_' . $suffix} ||
49      }                          ( $suffix eq 'from' ? 1 : 12);
50                    my $dd .= $param->{ $name . '_day_' . $suffix} ||
51                            ( $suffix eq 'from' ? 1 : 31);
52                    my $dt = new DateTime(
53                            year => $yyyy,
54                            month => $mm,
55                            day => $dd
56                    );
57                    return $dt->epoch || 'NULL';
58            }
59    
60            my $backup_from = mk_epoch_date('search_backup', 'from');
61            push @conditions, qq{ backups.date >= $backup_from } if ($backup_from);
62            my $backup_to = mk_epoch_date('search_backup', 'to');
63            push @conditions, qq{ backups.date <= $backup_to } if ($backup_to);
64    
65            my $files_from = mk_epoch_date('search', 'from');
66            push @conditions, qq{ files.date >= $files_from } if ($files_from);
67            my $files_to = mk_epoch_date('search', 'to');
68            push @conditions, qq{ files.date <= $files_to } if ($files_to);
69    
70      if ( defined ($param->{'search_filename'}) && $param->{'search_filename'} ne "") {          print STDERR "backup: $backup_from - $backup_to files: $files_from - $files_to cond:",join(" | ",@conditions);
         push (@conditions, " files.name LIKE '".$param->{'search_filename'}."%'");  
         }  
71            
72      $retSQL = "";          push( @conditions, ' backups.hostID = ' . $param->{'search_host'} ) if ($param->{'search_host'});
     foreach $cond(@conditions)  
       {  
           if ($retSQL ne "")  
             {  
                 $retSQL .= " AND ";  
             }  
           $retSQL .= $cond;  
       }        
73    
74                push (@conditions, " upper(files.name) LIKE upper('%".$param->{'search_filename'}."%')") if ($param->{'search_filename'});
75      return $retSQL;  
76            return (
77                    join(" and ", @conditions),
78                    $files_from, $files_to,
79                    $backup_from, $backup_to
80            );
81  }  }
82    
83  sub getFiles($$)  
84    {  sub getFiles($$) {
85        my ($where, $offset) = @_;          my ($where, $offset) = @_;
86          
87                  my $dbh = DBI->connect($dsn, $db_user, "", { RaiseError => 1, AutoCommit => 1 } );
88        my $dbh = DBI->connect( "dbi:SQLite:dbname=${TopDir}/$Conf{SearchDB}",  
89          "", "", { RaiseError => 1, AutoCommit => 1 } );          my $sql_cols = qq{
90        my $sql =                            files.id                        AS fid,
91          q{                    hosts.name                      AS hname,
92                  SELECT  files.id                        AS fid,                  shares.name                     AS sname,
93                          hosts.name                      AS hname,                  shares.share                    AS sharename,
94                          shares.name                     AS sname,                  files.backupNum                 AS backupNum,
95                          shares.share                    AS sharename,                  files.name                      AS filename,
96                          files.backupNum                 AS backupNum,                  files.path                      AS filepath,
97                          files.name                      AS filename,                  shares.share||files.fullpath    AS networkPath,
98                          files.path                      AS filepath,                  files.date                      AS date,
99                          shares.share||files.fullpath    AS networkPath,                  files.type                      AS filetype,
100                          date(files.date, 'unixepoch', 'localtime') AS date,                  files.size                      AS size,
101                          files.type                      AS filetype,                  dvds.name                       AS dvd
102                          files.size                      AS size,          };
103                          dvds.name                       AS dvd  
104            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
109                          LEFT  JOIN dvds         ON dvds.ID = files.dvdid                          LEFT  JOIN dvds         ON dvds.ID = files.dvdid
110            };          };
111    
112        if (defined($where) && $where ne "")          my $sql_where;
113          {          $sql_where = " WHERE ". $where if ($where);
             $sql .= " WHERE ". $where;        
         }  
114    
115        $sql .=          my $sql_order = qq{
116          q{                            ORDER BY files.id
117              ORDER BY files.id                          LIMIT $on_page
118                LIMIT 100                          OFFSET ?
               OFFSET ? * 100 + 1  
119          };          };
         
         
         
       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;  
   }  
120    
121  sub getBackupsNotBurned()          $offset ||= 0;
122    {          $offset = ($offset * $on_page) + 1;
123        my $dbh = DBI->connect( "dbi:SQLite:dbname=${TopDir}/$Conf{SearchDB}",  
124          "", "", { RaiseError => 1, AutoCommit => 1 } );                my $sth = $dbh->prepare(qq{ select count(files.id) $sql_from $sql_where });
125            $sth->execute();
126    
127            my ($results) = $sth->fetchrow_array();
128    
129            $sth = $dbh->prepare(qq{ select $sql_cols $sql_from $sql_where $sql_order });
130            $sth->execute( $offset );
131    
132            my @ret;
133          
134            while (my $row = $sth->fetchrow_hashref()) {
135                    push(@ret, {
136                            'hname'         => $row->{'hname'},
137                            'sname'         => $row->{'sname'},
138                            'sharename'     => $row->{'sharename'},
139                            'backupno'      => $row->{'backupnum'},
140                            'fname'         => $row->{'filename'},
141                            'fpath'         => $row->{'filepath'},
142                            'networkpath'   => $row->{'networkpath'},
143                            'date'          => $row->{'date'},
144                            'type'          => $row->{'filetype'},
145                            'size'          => $row->{'size'},
146                            'id'            => $row->{'fid'},
147                            'dvd'           => $row->{'dvd'}
148                    });
149            }
150          
151            $sth->finish();
152            $dbh->disconnect();
153            return ($results, \@ret);
154    }
155    
156    sub getBackupsNotBurned() {
157    
158            my $dbh = DBI->connect($dsn, $db_user, "", { RaiseError => 1, AutoCommit => 1 } );
159        my $sql = q{        my $sql = q{
160            SELECT            SELECT
161              hosts.ID         AS hostID,              hosts.ID         AS hostID,
# Line 224  sub getBackupsNotBurned() Line 177  sub getBackupsNotBurned()
177        my @ret = ();        my @ret = ();
178        $st -> execute();        $st -> execute();
179    
180        while ( my $tmp = $st -> fetchrow_hashref() )        while ( my $row = $st -> fetchrow_hashref() )
181          {                    {          
182              push(@ret, {              push(@ret, {
183                           'host'     => $tmp->{'host'},                           'host'     => $row->{'host'},
184                           'hostid'   => $tmp->{'hostID'},                           'hostid'   => $row->{'hostID'},
185                           'backupno' => $tmp->{'backupno'},                           'backupno' => $row->{'backupno'},
186                           'type'     => $tmp->{'type'},                           'type'     => $row->{'type'},
187                           'date'     => $tmp->{'date'}                           'date'     => $row->{'date'}
188                         }                         }
189              );              );
190          }          }
# Line 244  sub displayBackupsGrid() Line 197  sub displayBackupsGrid()
197        my $retHTML = "";        my $retHTML = "";
198        my $addForm = 1;        my $addForm = 1;
199                
200        if ($addForm)        if ($addForm) {
         {  
201    
202              $retHTML .= <<EOF3;              $retHTML .= <<EOF3;
203  <script language="javascript" type="text/javascript">  <script language="javascript" type="text/javascript">
# Line 268  sub displayBackupsGrid() Line 220  sub displayBackupsGrid()
220  //-->  //-->
221  </script>        </script>      
222  EOF3  EOF3
223                $retHTML .= q{<form name="forma" method="POST" action="}."$MyURL"."?action=burn\"";                $retHTML .= q{<form name="forma" method="GET" action="}."$MyURL"."?action=burn\"";
224                $retHTML.= q{<input type="hidden" value="burn" name="action">};                $retHTML.= q{<input type="hidden" value="burn" name="action">};
225                $retHTML .= q{<input type="hidden" value="results" name="search_results">};                $retHTML .= q{<input type="hidden" value="results" name="search_results">};
226          }          }
227        $retHTML .= "<table style=\"fview\">";          $retHTML .= qq{<table style="fview"><tr>};
228        $retHTML .= "<tr> ";  
229        if ($addForm)          if ($addForm) {
         {  
230              $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>";
231          }          }
232        $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{<td class="tableheader">Host</td><td class="tableheader">Backup no</td><td class="tableheader">Type</td><td class="tableheader">date</td></tr>};
233        my @backups = getBackupsNotBurned();  
234        my $backup;          my @backups = getBackupsNotBurned();
235            my $backup;
236        if ($addForm)  
237          {          if ($addForm) {
238              $retHTML .= "<tr>";                  $retHTML .= qq{<tr><td colspan=7 style="tableheader">
239              $retHTML .= "<td colspan=7 style=\"tableheader\">";                          <input type="submit" value="Burn selected backups on medium" name="submitBurner">
240              $retHTML .= "<input type=\"submit\" value=\"Burn selected backups on medium\" name=\"submitBurner\">";                          </td></tr>};
             $retHTML .= "</td>";  
             $retHTML .= "</tr>";  
               
241          }          }
242        foreach $backup(@backups)  
243          {          foreach $backup(@backups) {
244              my $ftype = "";  
245                    my $ftype = "";
246                            
247              $retHTML .= "<tr>";                  $retHTML .= "<tr>";
248              if ($addForm)                  if ($addForm) {
249                {                          $retHTML .= qq{<td class="fview"><input type="checkbox" name="fcb} .
250                    $retHTML .= "<td class=\"fview\"> <input type=\"checkbox\" name=\"fcb"                                  $backup->{'hostid'}."_".$backup->{'backupno'} .
251                      .$backup->{'hostid'}."_".$backup->{'backupno'}                                  qq{" value="} . $backup->{'hostid'}."_".$backup->{'backupno'} .
252                    ."\" value=\"".$backup->{'hostid'}."_".$backup->{'backupno'}."\"> </td>";                                  qq{"></td>};
253                }                      }          
254                            
255              $retHTML .= "<td class=\"fviewborder\">" . $backup->{'host'} . "</td>";                  $retHTML .= '<td class="fviewborder">' . $backup->{'host'} . '</td>' .
256              $retHTML .= "<td class=\"fviewborder\">" . $backup->{'backupno'} . "</td>";                          '<td class="fviewborder">' . $backup->{'backupno'} . '</td>' .
257              $retHTML .= "<td class=\"fviewborder\">" . $backup->{'type'} . "</td>";                          '<td class="fviewborder">' . $backup->{'type'} . '</td>' .
258              $retHTML .= "<td class=\"fviewborder\">" . $backup->{'date'} . "<td>";                          '<td class="fviewborder">' . epoch_to_iso( $backup->{'date'} ) . '<td>' .
259              $retHTML .= "</tr>";                          '</tr>';
260          }          }
261        $retHTML .= "</table>";  
262        if ($addForm)          $retHTML .= "</table>";
263         {  
264             $retHTML .= "</form>";          if ($addForm) {
265         }                  $retHTML .= "</form>";
266            }
267                
268        return $retHTML;          return $retHTML;
269      }      
     
   }        
270    
271  sub displayGrid($$$$) {  sub displayGrid($$$$) {
272          my ($where, $addForm, $offset, $hilite) = @_;          my ($where, $addForm, $offset, $hilite) = @_;
273          my $retHTML = "";          my $retHTML = "";
274    
275          if ($addForm) {          if ($addForm) {
276                  $retHTML .= qq{<form name="forma" method="POST" action="}.$MyURL.qq{?action=search">};                  $retHTML .= qq{<form name="forma" method="GET" action="$MyURL">};
277                  $retHTML.= qq{<input type="hidden" value="search" name="action">};                  $retHTML.= qq{<input type="hidden" value="search" name="action">};
278                  $retHTML .= qq{<input type="hidden" value="results" name="search_results">};                  $retHTML .= qq{<input type="hidden" value="results" name="search_results">};
279          }          }
280    
281            my ($results, $files) = getFiles($where, $offset);
282    
283            my ($from, $to) = (($offset * $on_page) + 1, ($offset * $on_page) + $on_page);
284    
285          $retHTML .= qq{          $retHTML .= qq{
286            <br/>Found $results files, showing $from - $to
287          <table style="fview" width="100%">          <table style="fview" width="100%">
288                  <tr>                  <tr>
289                  <td class="tableheader">Host</td>                  <td class="tableheader">Share</td>
                 <td class="tableheader">Type</td>  
290                  <td class="tableheader">Name</td>                  <td class="tableheader">Name</td>
291                  <td class="tableheader">backup no.</td>                  <td class="tableheader">Type</td>
292                  <td class="tableheader">size</td>                  <td class="tableheader">#</td>
293                  <td class="tableheader">date</td>                  <td class="tableheader">Size</td>
294                    <td class="tableheader">Date</td>
295                  <td class="tableheader">Media</td>                  <td class="tableheader">Media</td>
296                  </tr>                  </tr>
297          };          };
298          my @files = getFiles($where, $offset);  
299          my $file;          my $file;
300    
301          sub hilite_html($$) {          sub hilite_html($$) {
# Line 350  sub displayGrid($$$$) { Line 304  sub displayGrid($$$$) {
304                  return $html;                  return $html;
305          }          }
306    
307          foreach $file (@files) {          sub restore_link($$$$$$) {
308                  my $ftype = "file";                  my $type = shift;
309                  $ftype = "dir" if ($file->{'type'} == BPC_FTYPE_DIR);                  my $action = 'RestoreFile';
310                    $action = 'browse' if (lc($type) eq 'dir');
311                    return sprintf(qq{<a href="?action=%s&host=%s&num=%d&share=%s&dir=%s">%s</a>}, $action, @_);
312            }
313    
314            foreach $file (@{ $files }) {
315                    my $typeStr  = BackupPC::Attrib::fileType2Text(undef, $file->{'type'});
316                  $retHTML .= "<tr>";                  $retHTML .= "<tr>";
317    
318                  foreach my $v ((                  foreach my $v ((
319                          $file->{'hname'},                          $file->{'sharename'},
320                          $ftype,                          qq{<img src="$Conf{CgiImageDirURL}/icon-$typeStr.gif" align="center">&nbsp;} . hilite_html( $file->{'fpath'}, $hilite ),
321                          hilite_html( $file->{'fpath'}, $hilite ),                          $typeStr,
322                          $file->{'backupno'},                          restore_link( $typeStr, $file->{'hname'}, $file->{'backupno'}, $file->{'sname'}, $file->{'fpath'}, $file->{'backupno'} ),
323                          $file->{'size'},                          $file->{'size'},
324                          $file->{'date'},                          epoch_to_iso( $file->{'date'} ),
325                          $file->{'dvd'}                          $file->{'dvd'}
326                  )) {                  )) {
327                          $retHTML .= qq{<td class="fviewborder">$v</td>};                          $retHTML .= qq{<td class="fviewborder">$v</td>};
# Line 372  sub displayGrid($$$$) { Line 331  sub displayGrid($$$$) {
331          }          }
332          $retHTML .= "</table>";          $retHTML .= "</table>";
333    
334          # skip pager          # all variables which has to be transfered
335          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/) {
336                    $retHTML .= qq{<INPUT TYPE="hidden" NAME="$n" VALUE="$In{$n}">\n};
337            }
338    
339            my $del = '';
340            my $max_page = int( $results / $on_page );
341            my $page = 0;
342    
343          $retHTML .= "<INPUT TYPE=\"hidden\" VALUE=\"\" NAME=\"offset\">";          my $link_fmt = '<a href = "#" onclick="document.forma.offset.value=%d;document.forma.submit();">%s</a>';
344          for (my $ii = 1; $ii <= $#files; $ii++) {  
345                  $retHTML .= "<a href = \"#\" onclick=\"document.forma.offset.value=$ii;document.forma.submit();\">$ii</a>";          $retHTML .= '<div style="text-align: center;">';
346                  if ($ii < $#files) {  
347                          $retHTML .= " | ";          if ($offset > 0) {
348                    $retHTML .= sprintf($link_fmt, $offset - 1, '&lt;&lt;') . ' ';
349            }
350    
351            while ($page <= $max_page) {
352                    if ($page == $offset) {
353                            $retHTML .= $del . '<b>' . ($page + 1) . '</b>';
354                    } else {
355                            $retHTML .= $del . sprintf($link_fmt, $page, $page + 1);
356                    }
357    
358                    if ($page < $offset - $pager_pages && $page != 0) {
359                            $retHTML .= " ... ";
360                            $page = $offset - $pager_pages;
361                            $del = '';
362                    } elsif ($page > $offset + $pager_pages && $page != $max_page) {
363                            $retHTML .= " ... ";
364                            $page = $max_page;
365                            $del = '';
366                    } else {
367                            $del = ' | ';
368                            $page++;
369                  }                  }
370          }          }
371    
372            if ($offset < $max_page) {
373                    $retHTML .= ' ' . sprintf($link_fmt, $offset + 1, '&gt;&gt;');
374            }
375    
376            $retHTML .= "</div>";
377    
378          $retHTML .= "</form>" if ($addForm);          $retHTML .= "</form>" if ($addForm);
379          
380          return $retHTML;          return $retHTML;
381  }  }
382    

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

  ViewVC Help
Powered by ViewVC 1.1.26