/[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 86 by dpavlin, Sun Aug 28 12:35:59 2005 UTC revision 102 by dpavlin, Tue Aug 30 22:43:01 2005 UTC
# Line 62  sub dates_from_form($) { Line 62  sub dates_from_form($) {
62          sub mk_epoch_date($$) {          sub mk_epoch_date($$) {
63                  my ($name,$suffix) = @_;                  my ($name,$suffix) = @_;
64    
65                  my $yyyy = $param->{ $name . '_year_' . $suffix} || return;                  my $yyyy = $param->{ $name . '_year_' . $suffix} || return undef;
66                  my $mm .= $param->{ $name . '_month_' . $suffix} ||                  my $mm .= $param->{ $name . '_month_' . $suffix} ||
67                          ( $suffix eq 'from' ? 1 : 12);                          ( $suffix eq 'from' ? 1 : 12);
68                  my $dd .= $param->{ $name . '_day_' . $suffix} ||                  my $dd .= $param->{ $name . '_day_' . $suffix} ||
69                          ( $suffix eq 'from' ? 1 : 31);                          ( $suffix eq 'from' ? 1 : 31);
70    
71                    $yyyy =~ s/\D//g;
72                    $mm =~ s/\D//g;
73                    $dd =~ s/\D//g;
74    
75                  my $dt = new DateTime(                  my $dt = new DateTime(
76                          year => $yyyy,                          year => $yyyy,
77                          month => $mm,                          month => $mm,
78                          day => $dd                          day => $dd
79                  );                  );
80                    print STDERR "mk_epoch_date($name,$suffix) [$yyyy-$mm-$dd] = " . $dt->ymd . " " . $dt->hms . "\n";
81                  return $dt->epoch || 'NULL';                  return $dt->epoch || 'NULL';
82          }          }
83    
84          return (          my @ret = (
85                  mk_epoch_date('search_backup', 'from'),                  mk_epoch_date('search_backup', 'from'),
86                  mk_epoch_date('search_backup', 'to'),                  mk_epoch_date('search_backup', 'to'),
87                  mk_epoch_date('search', 'from'),                  mk_epoch_date('search', 'from'),
88                  mk_epoch_date('search', 'to'),                  mk_epoch_date('search', 'to'),
89          );          );
90    
91            return @ret;
92    
93  }  }
94    
95    
# Line 104  sub getWhere($) { Line 113  sub getWhere($) {
113  }  }
114    
115    
116  sub getFiles($$) {  sub getFiles($) {
117          my ($param, $offset) = @_;          my ($param) = @_;
118    
119            my $offset = $param->{'offset'} || 0;
120            $offset *= $on_page;
121    
122          my $dbh = get_dbh();          my $dbh = get_dbh();
123    
# Line 113  sub getFiles($$) { Line 125  sub getFiles($$) {
125                  files.id                        AS fid,                  files.id                        AS fid,
126                  hosts.name                      AS hname,                  hosts.name                      AS hname,
127                  shares.name                     AS sname,                  shares.name                     AS sname,
                 -- shares.share                 AS sharename,  
128                  files.backupnum                 AS backupnum,                  files.backupnum                 AS backupnum,
                 -- files.name                   AS filename,  
129                  files.path                      AS filepath,                  files.path                      AS filepath,
130                  files.date                      AS date,                  files.date                      AS date,
131                  files.type                      AS type,                  files.type                      AS type,
132                  files.size                      AS size,                  files.size                      AS size
                 -- dvds.name                    AS dvd  
                 null                            AS dvd  
133          };          };
134    
135          my $sql_from = qq{          my $sql_from = qq{
136                  FROM files                  FROM files
137                          INNER JOIN shares       ON files.shareID=shares.ID                          INNER JOIN shares       ON files.shareID=shares.ID
138                          INNER JOIN hosts        ON hosts.ID = shares.hostID                          INNER JOIN hosts        ON hosts.ID = shares.hostID
139                          INNER JOIN backups      ON backups.num = files.backupnum and backups.hostID = hosts.ID AND backups.shareID = shares.ID                          INNER JOIN backups      ON backups.num = files.backupnum and backups.hostID = hosts.ID AND backups.shareID = files.shareID
         };  
   
         my $sql_dvd_from = qq{  
                         -- LEFT  JOIN dvds              ON dvds.ID = files.dvdid  
140          };          };
141    
142          my $sql_where;          my $sql_where;
# Line 146  sub getFiles($$) { Line 150  sub getFiles($$) {
150          };          };
151    
152          my $sql_count = qq{ select count(files.id) $sql_from $sql_where };          my $sql_count = qq{ select count(files.id) $sql_from $sql_where };
153          my $sql_results = qq{ select $sql_cols $sql_from $sql_dvd_from $sql_where $sql_order };          my $sql_results = qq{ select $sql_cols $sql_from $sql_where $sql_order };
   
         $offset ||= 0;  
         $offset = ($offset * $on_page);  
154    
155          my $sth = $dbh->prepare($sql_count);          my $sth = $dbh->prepare($sql_count);
156          $sth->execute();          $sth->execute();
# Line 174  sub getFiles($$) { Line 175  sub getFiles($$) {
175          return ($results, \@ret);          return ($results, \@ret);
176  }  }
177    
178  sub getFilesHyperEstraier($$) {  sub getFilesHyperEstraier($) {
179          my ($param, $offset) = @_;          my ($param) = @_;
180    
181            my $offset = $param->{'offset'} || 0;
182            $offset *= $on_page;
183    
184          die "no index_path?" unless ($index_path);          die "no index_path?" unless ($index_path);
185    
# Line 191  sub getFilesHyperEstraier($$) { Line 195  sub getFilesHyperEstraier($$) {
195          my $q = $param->{'search_filename'};          my $q = $param->{'search_filename'};
196          my $shareid = $param->{'search_share'};          my $shareid = $param->{'search_share'};
197    
198          if ($q) {          if (length($q) > 0) {
199                  $q =~ s/(.)/$1 /g;                  # exact match
200                    $cond->add_attr("filepath ISTRINC $q");
201    
202                    $q =~ s/(.)/$1 /g;
203                  # set the search phrase to the search condition object                  # set the search phrase to the search condition object
204                  $cond->set_phrase($q);                  $cond->set_phrase($q);
205            }
206    
207                  my ($backup_from, $backup_to, $files_from, $files_to) = dates_from_form($param);          my ($backup_from, $backup_to, $files_from, $files_to) = dates_from_form($param);
   
                 $cond->add_attr("backup_date NUMGE $backup_from") if ($backup_from);  
                 $cond->add_attr("backup_date NUMLE $backup_to") if ($backup_to);  
208    
209                  $cond->add_attr("date NUMGE $files_from") if ($files_from);          $cond->add_attr("backup_date NUMGE $backup_from") if ($backup_from);
210                  $cond->add_attr("date NUMLE $files_to") if ($files_to);          $cond->add_attr("backup_date NUMLE $backup_to") if ($backup_to);
211    
212                  $cond->add_attr("shareid NUMEQ $shareid") if ($shareid);          $cond->add_attr("date NUMGE $files_from") if ($files_from);
213          }          $cond->add_attr("date NUMLE $files_to") if ($files_to);
214    
215          $offset ||= 0;          $cond->add_attr("shareid NUMEQ $shareid") if ($shareid);
         $offset = ($offset * $on_page);  
216    
217  #       $cond->set_max( $offset + $on_page );  #       $cond->set_max( $offset + $on_page );
218          $cond->set_options( $HyperEstraier::Condition::SURE );          $cond->set_options( $HyperEstraier::Condition::SURE );
# Line 217  sub getFilesHyperEstraier($$) { Line 220  sub getFilesHyperEstraier($$) {
220    
221          # get the result of search          # get the result of search
222          my $result = $db->search($cond, 0);          my $result = $db->search($cond, 0);
         $result->get(0);  
223    
224          my @res;          my @res;
225          my $hits = $result->size;          my $hits = $result->size;
226    
227          # for each document in result          # for each document in result
228          for my $i ($offset .. $result->size-1) {          for my $i ($offset .. ($offset + $on_page - 1)) {
229                    last if ($i >= $hits);
230    
231                  my $id = $result->get($i);                  my $id = $result->get($i);
232                  my $doc = $db->get_doc($id, 0);                  my $doc = $db->get_doc($id, 0);
233    
# Line 244  sub getBackupsNotBurned() { Line 248  sub getBackupsNotBurned() {
248          SELECT          SELECT
249                  backups.hostID          AS hostid,                  backups.hostID          AS hostid,
250                  min(hosts.name)         AS host,                  min(hosts.name)         AS host,
251                    min(shares.name)        AS share,
252                  backups.num             AS backupnum,                  backups.num             AS backupnum,
253                  min(backups.type)       AS type,                  min(backups.type)       AS type,
254                  min(backups.date)       AS date,                  min(backups.date)       AS date,
# Line 252  sub getBackupsNotBurned() { Line 257  sub getBackupsNotBurned() {
257                  INNER JOIN shares       ON files.shareID=shares.ID                  INNER JOIN shares       ON files.shareID=shares.ID
258                  INNER JOIN hosts        ON hosts.ID = shares.hostID                  INNER JOIN hosts        ON hosts.ID = shares.hostID
259                  INNER JOIN backups      ON backups.num = files.backupnum and backups.hostID = hosts.ID AND backups.shareID = shares.ID                  INNER JOIN backups      ON backups.num = files.backupnum and backups.hostID = hosts.ID AND backups.shareID = shares.ID
         WHERE  
                 files.dvdid     IS NULL  
260          GROUP BY          GROUP BY
261                  backups.hostID, backups.num                  backups.hostID, backups.num, backups.shareid
262          ORDER BY min(backups.date)          ORDER BY min(backups.date)
263          };          };
264          my $sth = $dbh->prepare( $sql );          my $sth = $dbh->prepare( $sql );
# Line 274  sub getBackupsNotBurned() { Line 277  sub getBackupsNotBurned() {
277  sub displayBackupsGrid()  sub displayBackupsGrid()
278    {    {
279        my $retHTML = "";        my $retHTML = "";
       my $addForm = 1;  
280                
281        if ($addForm) {          $retHTML .= <<EOF3;
   
             $retHTML .= <<EOF3;  
282  <script language="javascript" type="text/javascript">  <script language="javascript" type="text/javascript">
283  <!--  <!--
284    
# Line 299  sub displayBackupsGrid() Line 299  sub displayBackupsGrid()
299  //-->  //-->
300  </script>        </script>      
301  EOF3  EOF3
302                $retHTML .= q{<form name="forma" method="GET" action="}."$MyURL"."?action=burn\"";          $retHTML .= q{
303                $retHTML.= q{<input type="hidden" value="burn" name="action">};                  <form name="forma" method="GET" action="$MyURL?action=burn">
304                $retHTML .= q{<input type="hidden" value="results" name="search_results">};                  <input type="hidden" value="burn" name="action">
305          }                  <input type="hidden" value="results" name="search_results">
306          $retHTML .= qq{                  <table style="fview" border="0" cellspacing="0" cellpadding="2">
                 <table style="fview" border="1" cellspacing="0" cellpadding="3">  
307                  <tr class="tableheader">                  <tr class="tableheader">
308          };                  <td class="tableheader">
309                            <input type="checkbox" name="allFiles" onClick="checkAll('allFiles');">
310          if ($addForm) {                  </td>
311              $retHTML .= "<td class=\"tableheader\"><input type=\"checkbox\" name=\"allFiles\" onClick=\"checkAll('allFiles');\"></td>";                  <td align="center">Share</td>
         }  
         $retHTML .=  qq{  
                 <td align="center">Host</td>  
312                  <td align="center">Backup no</td>                  <td align="center">Backup no</td>
313                  <td align="center">Type</td>                  <td align="center">Type</td>
314                  <td align="center">date</td>                  <td align="center">date</td>
315                  <td align="center">age/days</td>                  <td align="center">age/days</td>
316                  <td align="center">size/MB</td>                  <td align="center">size/MB</td>
317                  </tr>                  </tr>
318    
319                    <tr><td colspan=7 style="tableheader">
320                    <input type="submit" value="Burn selected backups on medium" name="submitBurner">
321                    </td></tr>
322          };          };
323    
324          my @backups = getBackupsNotBurned();          my @color = (' bgcolor="#e0e0e0"', '');
         my $backup;  
325    
326          if ($addForm) {          my $i = 0;
327                  $retHTML .= qq{          my $host = '';
                         <tr><td colspan=7 style="tableheader">  
                         <input type="submit" value="Burn selected backups on medium" name="submitBurner">  
                         </td></tr>  
                 };  
         }  
328    
329          foreach $backup(@backups) {          foreach my $backup ( getBackupsNotBurned() ) {
330    
331                    if ($host ne $backup->{'host'}) {
332                            $i++;
333                            $host = $backup->{'host'};
334                    }
335                  my $ftype = "";                  my $ftype = "";
336                            
337                  $retHTML .= "<tr>";                  $retHTML .= "<tr" . $color[$i %2 ] . ">";
338                  if ($addForm) {                  $retHTML .= '<td class="fview"><input type="checkbox" name="fcb' .
                         $retHTML .= '<td class="fview"><input type="checkbox" name="fcb' .  
339                                  $backup->{'hostid'}.'_'.$backup->{'backupnum'} .                                  $backup->{'hostid'}.'_'.$backup->{'backupnum'} .
340                                  '" value="' . $backup->{'hostid'}.'_'.$backup->{'backupnum'} .                                  '" value="' . $backup->{'hostid'}.'_'.$backup->{'backupnum'} .
341                                  '"></td>';                                  '"></td>';
                 }            
342                            
343                  $retHTML .= '<td class="fviewborder">' . $backup->{'host'} . '</td>' .                  $retHTML .=
344                          '<td class="fviewborder">' . $backup->{'backupnum'} . '</td>' .                          '<td align="right">' . $backup->{'host'} . ':' . $backup->{'share'} . '</td>' .
345                          '<td class="fviewborder">' . $backup->{'type'} . '</td>' .                          '<td align="center">' . $backup->{'backupnum'} . '</td>' .
346                          '<td class="fviewborder">' . epoch_to_iso( $backup->{'date'} ) . '</td>' .                          '<td align="center">' . $backup->{'type'} . '</td>' .
347                          '<td class="fviewborder">' . $backup->{'age'} . '</td>' .                          '<td align="center">' . epoch_to_iso( $backup->{'date'} ) . '</td>' .
348                          '<td class="fviewborder">' . $backup->{'size'} . '</td>' .                          '<td align="center">' . $backup->{'age'} . '</td>' .
349                          '</tr>';                          '<td align="right">' . $backup->{'size'} . '</td>' .
350          }                          "</tr>\n";
351    
         $retHTML .= "</table>";  
352    
         if ($addForm) {  
                 $retHTML .= "</form>";  
353          }          }
354    
355            $retHTML .= "</table>";
356            $retHTML .= "</form>";
357                
358          return $retHTML;          return $retHTML;
359  }        }      
# Line 373  sub displayGrid($) { Line 369  sub displayGrid($) {
369          my $start_t = time();          my $start_t = time();
370    
371          my ($results, $files);          my ($results, $files);
372          if ($param->{'use_hest'}) {          if ($param->{'use_hest'} && length($hilite) > 0) {
373                  ($results, $files) = getFilesHyperEstraier($param, $offset);                  ($results, $files) = getFilesHyperEstraier($param);
374          } else {          } else {
375                  ($results, $files) = getFiles($param, $offset);                  ($results, $files) = getFiles($param);
376          }          }
377    
378          my $dur_t = time() - $start_t;          my $dur_t = time() - $start_t;
# Line 402  sub displayGrid($) { Line 398  sub displayGrid($) {
398          </div>          </div>
399          <table style="fview" width="100%" border="0" cellpadding="2" cellspacing="0">          <table style="fview" width="100%" border="0" cellpadding="2" cellspacing="0">
400                  <tr class="fviewheader">                  <tr class="fviewheader">
401                    <td></td>
402                  <td align="center">Share</td>                  <td align="center">Share</td>
403                  <td align="center">Type and Name</td>                  <td align="center">Type and Name</td>
404                  <td align="center">#</td>                  <td align="center">#</td>
# Line 426  sub displayGrid($) { Line 423  sub displayGrid($) {
423                  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, @_);
424          }          }
425    
426            my $i = $offset * $on_page;
427    
428          foreach $file (@{ $files }) {          foreach $file (@{ $files }) {
429                    $i++;
430    
431                  my $typeStr  = BackupPC::Attrib::fileType2Text(undef, $file->{'type'});                  my $typeStr  = BackupPC::Attrib::fileType2Text(undef, $file->{'type'});
432                  $retHTML .= qq{<tr class="fviewborder">};                  $retHTML .= qq{<tr class="fviewborder">};
433    
434                    $retHTML .= qq{<td class="fviewborder">$i</td>};
435    
436                  $retHTML .=                  $retHTML .=
437                          qq{<td class="fviewborder" align="right">} . $file->{'hname'} . ':' . $file->{'sname'} . qq{</td>} .                          qq{<td class="fviewborder" align="right">} . $file->{'hname'} . ':' . $file->{'sname'} . qq{</td>} .
438                          qq{<td class="fviewborder"><img src="$Conf{CgiImageDirURL}/icon-$typeStr.gif" alt="$typeStr" align="middle">&nbsp;} . hilite_html( $file->{'filepath'}, $hilite ) . qq{</td>} .                          qq{<td class="fviewborder"><img src="$Conf{CgiImageDirURL}/icon-$typeStr.gif" alt="$typeStr" align="middle">&nbsp;} . hilite_html( $file->{'filepath'}, $hilite ) . qq{</td>} .
439                          qq{<td class="fviewborder" align="center">} . restore_link( $typeStr, ${EscURI( $file->{'hname'} )}, $file->{'backupnum'}, ${EscURI( $file->{'sname'})}, ${EscURI( $file->{'filepath'} )}, $file->{'backupnum'} ) . qq{</td>} .                          qq{<td class="fviewborder" align="center">} . restore_link( $typeStr, ${EscURI( $file->{'hname'} )}, $file->{'backupnum'}, ${EscURI( $file->{'sname'})}, ${EscURI( $file->{'filepath'} )}, $file->{'backupnum'} ) . qq{</td>} .
440                          qq{<td class="fviewborder" align="right">} . $file->{'size'} . qq{</td>} .                          qq{<td class="fviewborder" align="right">} . $file->{'size'} . qq{</td>} .
441                          qq{<td class="fviewborder">} . epoch_to_iso( $file->{'date'} ) . qq{</td>} .                          qq{<td class="fviewborder">} . epoch_to_iso( $file->{'date'} ) . qq{</td>} .
442                          qq{<td class="fviewborder">} . $file->{'dvd'} . qq{</td>};                          qq{<td class="fviewborder">} . '?' . qq{</td>};
443    
444                  $retHTML .= "</tr>";                  $retHTML .= "</tr>";
445          }          }

Legend:
Removed from v.86  
changed lines
  Added in v.102

  ViewVC Help
Powered by ViewVC 1.1.26