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

Legend:
Removed from v.9  
changed lines
  Added in v.53

  ViewVC Help
Powered by ViewVC 1.1.26