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

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

  ViewVC Help
Powered by ViewVC 1.1.26