/[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 30 by dpavlin, Fri Jul 29 17:30:25 2005 UTC revision 31 by dpavlin, Sun Jul 31 16:16:55 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 vars qw(%In $MyURL);
9    
10    my $on_page = 100;
11    my $pager_pages = 10;
12    
13  sub getUnits() {  sub getUnits() {
14      my @ret = ();      my @ret = ();
# Line 62  sub getWhere($) { Line 66  sub getWhere($) {
66  }  }
67    
68    
69  sub getFiles($$)  sub getFiles($$) {
70    {          my ($where, $offset) = @_;
71        my ($where, $offset) = @_;  
72                  my $dbh = DBI->connect( "dbi:SQLite:dbname=${TopDir}/$Conf{SearchDB}",
73                          "", "", { RaiseError => 1, AutoCommit => 1 } );
74        my $dbh = DBI->connect( "dbi:SQLite:dbname=${TopDir}/$Conf{SearchDB}",  
75          "", "", { RaiseError => 1, AutoCommit => 1 } );          my $sql_cols = qq{
76        my $sql =                            files.id                        AS fid,
77          q{                    hosts.name                      AS hname,
78                  SELECT  files.id                        AS fid,                  shares.name                     AS sname,
79                          hosts.name                      AS hname,                  shares.share                    AS sharename,
80                          shares.name                     AS sname,                  files.backupNum                 AS backupNum,
81                          shares.share                    AS sharename,                  files.name                      AS filename,
82                          files.backupNum                 AS backupNum,                  files.path                      AS filepath,
83                          files.name                      AS filename,                  shares.share||files.fullpath    AS networkPath,
84                          files.path                      AS filepath,                  date(files.date, 'unixepoch', 'localtime') AS date,
85                          shares.share||files.fullpath    AS networkPath,                  files.type                      AS filetype,
86                          date(files.date, 'unixepoch', 'localtime') AS date,                  files.size                      AS size,
87                          files.type                      AS filetype,                  dvds.name                       AS dvd
88                          files.size                      AS size,          };
89                          dvds.name                       AS dvd  
90            my $sql_from = qq{
91                  FROM files                  FROM files
92                          INNER JOIN shares       ON files.shareID=shares.ID                          INNER JOIN shares       ON files.shareID=shares.ID
93                          INNER JOIN hosts        ON hosts.ID = shares.hostID                          INNER JOIN hosts        ON hosts.ID = shares.hostID
94                          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
95                          LEFT  JOIN dvds         ON dvds.ID = files.dvdid                          LEFT  JOIN dvds         ON dvds.ID = files.dvdid
96            };          };
97    
98        if (defined($where) && $where ne "")          my $sql_where;
99          {          $sql_where = " WHERE ". $where if ($where);
             $sql .= " WHERE ". $where;        
         }  
100    
101        $sql .=          my $sql_order = qq{
102          q{                            ORDER BY files.id
103              ORDER BY files.id                          LIMIT $on_page
104                LIMIT 100                          OFFSET ?
               OFFSET ? * 100 + 1  
105          };          };
106          
107                  $offset ||= 0;
108                  $offset = ($offset * $on_page) + 1;
109        my $st = $dbh->prepare(  
110            $sql          my $sth = $dbh->prepare(qq{ select count(files.id) $sql_from $sql_where });
111            );              $sth->execute();
112        if (!defined($offset) && $offset ne "")  
113        {          my ($results) = $sth->fetchrow_array();
114          $st->bind_param(1, $offset);  
115        }          $sth = $dbh->prepare(qq{ select $sql_cols $sql_from $sql_where $sql_order });
116        else          $sth->execute( $offset );
117        {  
118          $st->bind_param(1,0);          my @ret;
119        }        
120        $st->execute;          while (my $row = $sth->fetchrow_hashref()) {
121                          push(@ret, {
122        my @ret = ();                          'hname'         => $row->{'hname'},
123        my $tmp;                          'sname'         => $row->{'sname'},
124                                  'sharename'     => $row->{'sharename'},
125        while ($tmp = $st->fetchrow_hashref())                          'backupno'      => $row->{'backupNum'},
126          {                          'fname'         => $row->{'filename'},
127              push(@ret, {                          'fpath'         => $row->{'filepath'},
128                             'hname'       => $tmp->{'hname'},                          'networkpath'   => $row->{'networkPath'},
129                             'sname'       => $tmp->{'sname'},                          'date'          => $row->{'date'},
130                             'sharename'   => $tmp->{'sharename'},                          'type'          => $row->{'filetype'},
131                             'backupno'    => $tmp->{'backupNum'},                          'size'          => $row->{'size'},
132                             'fname'       => $tmp->{'filename'},                          'id'            => $row->{'fid'},
133                             'fpath'       => $tmp->{'filepath'},                          'dvd'           => $row->{'dvd'}
134                             'networkpath' => $tmp->{'networkPath'},                  });
135                             'date'        => $tmp->{'date'},          }
136                             'type'        => $tmp->{'filetype'},        
137                             'size'        => $tmp->{'size'},          $sth->finish();
138                             'id'          => $tmp->{'fid'},          $dbh->disconnect();
139                             'dvd'         => $tmp->{'dvd'}          return ($results, \@ret);
140                         }  }
             );  
                                   
         }  
         
       $st->finish();  
       $dbh->disconnect();  
       return @ret;  
   }  
141    
142  sub getBackupsNotBurned()  sub getBackupsNotBurned()
143    {    {
# Line 170  sub getBackupsNotBurned() Line 164  sub getBackupsNotBurned()
164        my @ret = ();        my @ret = ();
165        $st -> execute();        $st -> execute();
166    
167        while ( my $tmp = $st -> fetchrow_hashref() )        while ( my $row = $st -> fetchrow_hashref() )
168          {                    {          
169              push(@ret, {              push(@ret, {
170                           'host'     => $tmp->{'host'},                           'host'     => $row->{'host'},
171                           'hostid'   => $tmp->{'hostID'},                           'hostid'   => $row->{'hostID'},
172                           'backupno' => $tmp->{'backupno'},                           'backupno' => $row->{'backupno'},
173                           'type'     => $tmp->{'type'},                           'type'     => $row->{'type'},
174                           'date'     => $tmp->{'date'}                           'date'     => $row->{'date'}
175                         }                         }
176              );              );
177          }          }
# Line 190  sub displayBackupsGrid() Line 184  sub displayBackupsGrid()
184        my $retHTML = "";        my $retHTML = "";
185        my $addForm = 1;        my $addForm = 1;
186                
187        if ($addForm)        if ($addForm) {
         {  
188    
189              $retHTML .= <<EOF3;              $retHTML .= <<EOF3;
190  <script language="javascript" type="text/javascript">  <script language="javascript" type="text/javascript">
# Line 214  sub displayBackupsGrid() Line 207  sub displayBackupsGrid()
207  //-->  //-->
208  </script>        </script>      
209  EOF3  EOF3
210                $retHTML .= q{<form name="forma" method="POST" action="}."$MyURL"."?action=burn\"";                $retHTML .= q{<form name="forma" method="GET" action="}."$MyURL"."?action=burn\"";
211                $retHTML.= q{<input type="hidden" value="burn" name="action">};                $retHTML.= q{<input type="hidden" value="burn" name="action">};
212                $retHTML .= q{<input type="hidden" value="results" name="search_results">};                $retHTML .= q{<input type="hidden" value="results" name="search_results">};
213          }          }
214        $retHTML .= "<table style=\"fview\">";          $retHTML .= qq{<table style="fview"><tr>};
215        $retHTML .= "<tr> ";  
216        if ($addForm)          if ($addForm) {
         {  
217              $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>";
218          }          }
219        $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>};
220        my @backups = getBackupsNotBurned();  
221        my $backup;          my @backups = getBackupsNotBurned();
222            my $backup;
223        if ($addForm)  
224          {          if ($addForm) {
225              $retHTML .= "<tr>";                  $retHTML .= qq{<tr><td colspan=7 style="tableheader">
226              $retHTML .= "<td colspan=7 style=\"tableheader\">";                          <input type="submit" value="Burn selected backups on medium" name="submitBurner">
227              $retHTML .= "<input type=\"submit\" value=\"Burn selected backups on medium\" name=\"submitBurner\">";                          </td></tr>};
             $retHTML .= "</td>";  
             $retHTML .= "</tr>";  
               
228          }          }
229        foreach $backup(@backups)  
230          {          foreach $backup(@backups) {
231              my $ftype = "";  
232                    my $ftype = "";
233                            
234              $retHTML .= "<tr>";                  $retHTML .= "<tr>";
235              if ($addForm)                  if ($addForm) {
236                {                          $retHTML .= qq{<td class="fview"><input type="checkbox" name="fcb} .
237                    $retHTML .= "<td class=\"fview\"> <input type=\"checkbox\" name=\"fcb"                                  $backup->{'hostid'}."_".$backup->{'backupno'} .
238                      .$backup->{'hostid'}."_".$backup->{'backupno'}                                  qq{" value="} . $backup->{'hostid'}."_".$backup->{'backupno'} .
239                    ."\" value=\"".$backup->{'hostid'}."_".$backup->{'backupno'}."\"> </td>";                                  qq{"></td>};
240                }                      }          
241                            
242              $retHTML .= "<td class=\"fviewborder\">" . $backup->{'host'} . "</td>";                  $retHTML .= '<td class="fviewborder">' . $backup->{'host'} . '</td>' .
243              $retHTML .= "<td class=\"fviewborder\">" . $backup->{'backupno'} . "</td>";                          '<td class="fviewborder">' . $backup->{'backupno'} . '</td>' .
244              $retHTML .= "<td class=\"fviewborder\">" . $backup->{'type'} . "</td>";                          '<td class="fviewborder">' . $backup->{'type'} . '</td>' .
245              $retHTML .= "<td class=\"fviewborder\">" . $backup->{'date'} . "<td>";                          '<td class="fviewborder">' . $backup->{'date'} . '<td>' .
246              $retHTML .= "</tr>";                          '</tr>';
247          }          }
248        $retHTML .= "</table>";  
249        if ($addForm)          $retHTML .= "</table>";
250         {  
251             $retHTML .= "</form>";          if ($addForm) {
252         }                  $retHTML .= "</form>";
253            }
254                
255        return $retHTML;          return $retHTML;
256      }      
     
   }        
257    
258  sub displayGrid($$$$) {  sub displayGrid($$$$) {
259          my ($where, $addForm, $offset, $hilite) = @_;          my ($where, $addForm, $offset, $hilite) = @_;
260          my $retHTML = "";          my $retHTML = "";
261    
262          if ($addForm) {          if ($addForm) {
263                  $retHTML .= qq{<form name="forma" method="POST" action="}.$MyURL.qq{?action=search">};                  $retHTML .= qq{<form name="forma" method="GET" action="$MyURL">};
264                  $retHTML.= qq{<input type="hidden" value="search" name="action">};                  $retHTML.= qq{<input type="hidden" value="search" name="action">};
265                  $retHTML .= qq{<input type="hidden" value="results" name="search_results">};                  $retHTML .= qq{<input type="hidden" value="results" name="search_results">};
266          }          }
267    
268            my ($results, $files) = getFiles($where, $offset);
269    
270            my ($from, $to) = (($offset * $on_page) + 1, ($offset * $on_page) + $on_page);
271    
272          $retHTML .= qq{          $retHTML .= qq{
273            <br/>Found $results files, showing $from - $to
274          <table style="fview" width="100%">          <table style="fview" width="100%">
275                  <tr>                  <tr>
276                  <td class="tableheader">Share</td>                  <td class="tableheader">Share</td>
# Line 287  sub displayGrid($$$$) { Line 282  sub displayGrid($$$$) {
282                  <td class="tableheader">Media</td>                  <td class="tableheader">Media</td>
283                  </tr>                  </tr>
284          };          };
285          my @files = getFiles($where, $offset);  
286          my $file;          my $file;
287    
288          sub hilite_html($$) {          sub hilite_html($$) {
# Line 303  sub displayGrid($$$$) { Line 298  sub displayGrid($$$$) {
298                  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, @_);
299          }          }
300    
301          foreach $file (@files) {          foreach $file (@{ $files }) {
302                  my $typeStr  = BackupPC::Attrib::fileType2Text(undef, $file->{'type'});                  my $typeStr  = BackupPC::Attrib::fileType2Text(undef, $file->{'type'});
303                  $retHTML .= "<tr>";                  $retHTML .= "<tr>";
304    
# Line 323  sub displayGrid($$$$) { Line 318  sub displayGrid($$$$) {
318          }          }
319          $retHTML .= "</table>";          $retHTML .= "</table>";
320    
321          # skip pager          # all variables which has to be transfered
322          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/) {
323                    $retHTML .= qq{<INPUT TYPE="hidden" NAME="$n" VALUE="$In{$n}">\n};
324            }
325    
326            my $del = '';
327            my $max_page = int( $results / $on_page );
328            my $page = 0;
329    
330            my $link_fmt = '<a href = "#" onclick="document.forma.offset.value=%d;document.forma.submit();">%s</a>';
331    
332            $retHTML .= '<div style="text-align: center;">';
333    
334            if ($offset > 0) {
335                    $retHTML .= sprintf($link_fmt, $offset - 1, '&lt;&lt;') . ' ';
336            }
337    
338            while ($page <= $max_page) {
339                    if ($page == $offset) {
340                            $retHTML .= $del . '<b>' . ($page + 1) . '</b>';
341                    } else {
342                            $retHTML .= $del . sprintf($link_fmt, $page, $page + 1);
343                    }
344    
345          $retHTML .= "<INPUT TYPE=\"hidden\" VALUE=\"\" NAME=\"offset\">";                  if ($page < $offset - $pager_pages && $page != 0) {
346          for (my $ii = 1; $ii <= $#files; $ii++) {                          $retHTML .= " ... ";
347                  $retHTML .= "<a href = \"#\" onclick=\"document.forma.offset.value=$ii;document.forma.submit();\">$ii</a>";                          $page = $offset - $pager_pages;
348                  if ($ii < $#files) {                          $del = '';
349                          $retHTML .= " | ";                  } elsif ($page > $offset + $pager_pages && $page != $max_page) {
350                            $retHTML .= " ... ";
351                            $page = $max_page;
352                            $del = '';
353                    } else {
354                            $del = ' | ';
355                            $page++;
356                  }                  }
357          }          }
358    
359            if ($offset < $max_page) {
360                    $retHTML .= ' ' . sprintf($link_fmt, $offset + 1, '&gt;&gt;');
361            }
362    
363            $retHTML .= "</div>";
364    
365          $retHTML .= "</form>" if ($addForm);          $retHTML .= "</form>" if ($addForm);
366          
367          return $retHTML;          return $retHTML;
368  }  }
369    

Legend:
Removed from v.30  
changed lines
  Added in v.31

  ViewVC Help
Powered by ViewVC 1.1.26