/[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 88 by dpavlin, Sun Aug 28 14:15:01 2005 UTC revision 194 by dpavlin, Thu Oct 13 17:11:59 2005 UTC
# Line 8  use DBI; Line 8  use DBI;
8  use DateTime;  use DateTime;
9  use vars qw(%In $MyURL);  use vars qw(%In $MyURL);
10  use Time::HiRes qw/time/;  use Time::HiRes qw/time/;
11    use XML::Writer;
12    use IO::File;
13    
14  my $on_page = 100;  my $on_page = 100;
15  my $pager_pages = 10;  my $pager_pages = 10;
# Line 15  my $pager_pages = 10; Line 17  my $pager_pages = 10;
17  my $dsn = $Conf{SearchDSN};  my $dsn = $Conf{SearchDSN};
18  my $db_user = $Conf{SearchUser} || '';  my $db_user = $Conf{SearchUser} || '';
19    
20  my $index_path = $Conf{HyperEstraierIndex};  my $hest_index_path = $Conf{HyperEstraierIndex};
 if ($index_path) {  
         $index_path = $TopDir . '/' . $index_path;  
         $index_path =~ s#//#/#g;  
 }  
21    
22  my $dbh;  my $dbh;
23    
# Line 72  sub dates_from_form($) { Line 70  sub dates_from_form($) {
70                  $mm =~ s/\D//g;                  $mm =~ s/\D//g;
71                  $dd =~ s/\D//g;                  $dd =~ s/\D//g;
72    
73                    my $h = my $m = my $s = 0;
74                    if ($suffix eq 'to') {
75                            $h = 23;
76                            $m = 59;
77                            $s = 59;
78                    }
79    
80                  my $dt = new DateTime(                  my $dt = new DateTime(
81                          year => $yyyy,                          year => $yyyy,
82                          month => $mm,                          month => $mm,
83                          day => $dd                          day => $dd,
84                            hour => $h,
85                            minute => $m,
86                            second => $s,
87                  );                  );
88                  print STDERR "mk_epoch_date($name,$suffix) [$yyyy-$mm-$dd] = " . $dt->ymd . " " . $dt->hms . "\n";                  print STDERR "mk_epoch_date($name,$suffix) [$yyyy-$mm-$dd] = " . $dt->ymd . " " . $dt->hms . "\n";
89                  return $dt->epoch || 'NULL';                  return $dt->epoch || 'NULL';
# Line 104  sub getWhere($) { Line 112  sub getWhere($) {
112          push @conditions, qq{ files.date >= $files_from } if ($files_from);          push @conditions, qq{ files.date >= $files_from } if ($files_from);
113          push @conditions, qq{ files.date <= $files_to } if ($files_to);          push @conditions, qq{ files.date <= $files_to } if ($files_to);
114    
115          print STDERR "backup: $backup_from - $backup_to files: $files_from - $files_to cond:" . join(" | ",@conditions);          print STDERR "backup: $backup_from - $backup_to files: $files_from - $files_to cond:" . join(" and ",@conditions);
116    
117          push( @conditions, ' files.shareid = ' . $param->{'search_share'} ) if ($param->{'search_share'});          push( @conditions, ' files.shareid = ' . $param->{'search_share'} ) if ($param->{'search_share'});
118          push (@conditions, " upper(files.path) LIKE upper('%".$param->{'search_filename'}."%')") if ($param->{'search_filename'});          push (@conditions, " upper(files.path) LIKE upper('%".$param->{'search_filename'}."%')") if ($param->{'search_filename'});
# Line 175  sub getFiles($) { Line 183  sub getFiles($) {
183          return ($results, \@ret);          return ($results, \@ret);
184  }  }
185    
186    sub getHyperEstraier_url($) {
187            my ($use_hest) = @_;
188    
189            return unless $use_hest;
190    
191            use HyperEstraier;
192            my ($index_path, $index_node_url);
193    
194            if ($use_hest =~ m#^http://#) {
195                    $index_node_url = $use_hest;
196            } else {
197                    $index_path = $TopDir . '/' . $index_path;
198                    $index_path =~ s#//#/#g;
199            }
200            return ($index_path, $index_node_url);
201    }
202    
203  sub getFilesHyperEstraier($) {  sub getFilesHyperEstraier($) {
204          my ($param) = @_;          my ($param) = @_;
205    
206          my $offset = $param->{'offset'} || 0;          my $offset = $param->{'offset'} || 0;
207          $offset *= $on_page;          $offset *= $on_page;
208    
209          die "no index_path?" unless ($index_path);          die "no index_path?" unless ($hest_index_path);
210    
211          use HyperEstraier;          use HyperEstraier;
212    
213            my ($index_path, $index_node_url) = getHyperEstraier_url($hest_index_path);
214    
215          # open the database          # open the database
216          my $db = HyperEstraier::Database->new();          my $db;
217          $db->open($index_path, $HyperEstraier::ESTDBREADER);          if ($index_path) {
218                    $db = HyperEstraier::Database->new();
219                    $db->open($index_path, $HyperEstraier::ESTDBREADER);
220            } elsif ($index_node_url) {
221                    $db ||= HyperEstraier::Node->new($index_node_url);
222                    $db->set_auth('admin', 'admin');
223            } else {
224                    die "BUG: unimplemented";
225            }
226    
227          # create a search condition object          # create a search condition object
228          my $cond = HyperEstraier::Condition->new();          my $cond = HyperEstraier::Condition->new();
# Line 196  sub getFilesHyperEstraier($) { Line 231  sub getFilesHyperEstraier($) {
231          my $shareid = $param->{'search_share'};          my $shareid = $param->{'search_share'};
232    
233          if (length($q) > 0) {          if (length($q) > 0) {
234                  $q =~ s/(.)/$1 /g;                  # exact match
235                    $cond->add_attr("filepath ISTRINC $q");
236    
237                    $q =~ s/(.)/$1 /g;
238                  # set the search phrase to the search condition object                  # set the search phrase to the search condition object
239                  $cond->set_phrase($q);                  $cond->set_phrase($q);
240          }          }
# Line 217  sub getFilesHyperEstraier($) { Line 254  sub getFilesHyperEstraier($) {
254          $cond->set_order( 'date NUMA' );          $cond->set_order( 'date NUMA' );
255    
256          # get the result of search          # get the result of search
         my $result = $db->search($cond, 0);  
   
257          my @res;          my @res;
258          my $hits = $result->size;          my ($result, $hits);
259    
260            if ($index_path) {
261                    $result = $db->search($cond, 0);
262                    $hits = $result->size;
263            } elsif ($index_node_url) {
264                    $result = $db->search($cond, 0);
265                    $hits = $result->doc_num;
266            } else {
267                    die "BUG: unimplemented";
268            }
269    
270          # for each document in result          # for each document in result
271          for my $i ($offset .. ($offset + $on_page - 1)) {          for my $i ($offset .. ($offset + $on_page - 1)) {
272                  last if ($i >= $hits);                  last if ($i >= $hits);
273    
274                  my $id = $result->get($i);                  my $doc;
275                  my $doc = $db->get_doc($id, 0);                  if ($index_path) {
276                            my $id = $result->get($i);
277                            $doc = $db->get_doc($id, 0);
278                    } elsif ($index_node_url) {
279                            $doc = $result->get_doc($i);
280                    } else {
281                            die "BUG: unimplemented";
282                    }
283    
284                  my $row;                  my $row;
285                  foreach my $c (qw/fid hname sname backupnum fiilename filepath date type size/) {                  foreach my $c (qw/fid hname sname backupnum fiilename filepath date type size/) {
# Line 239  sub getFilesHyperEstraier($) { Line 291  sub getFilesHyperEstraier($) {
291          return ($hits, \@res);          return ($hits, \@res);
292  }  }
293    
294    sub getGzipName($$$)
295    {
296            my ($host, $share, $backupnum) = @_;
297            my $ret = $Conf{GzipSchema};
298            
299            $share =~ s/\//_/g;
300            $ret =~ s/\\h/$host/ge;
301            $ret =~ s/\\s/$share/ge;
302            $ret =~ s/\\n/$backupnum/ge;
303    
304            $ret =~ s/__+/_/g;
305    
306            return $ret;
307            
308    }
309    
310    sub get_tgz_size_by_name($) {
311            my $name = shift;
312    
313            my $tgz = $Conf{InstallDir}.'/'.$Conf{GzipTempDir}.'/'.$name;
314    
315            my $size = -1;
316    
317            if (-f $tgz) {
318                    $size = (stat($tgz))[7];
319            } elsif (-d $tgz) {
320                    opendir(my $dir, $tgz) || die "can't opendir $tgz: $!";
321                    my @parts = grep { !/^\./ && -f "$tgz/$_" } readdir($dir);
322                    $size = 0;
323                    foreach my $part (@parts) {
324                            $size += (stat("$tgz/$part"))[7] || die "can't stat $tgz/$part: $!";
325                    }
326                    closedir $dir;
327            }
328    
329            return $size;
330    }
331    
332    sub getGzipSize($$)
333    {
334            my ($hostID, $backupNum) = @_;
335            my $sql;
336            my $dbh = get_dbh();
337            
338            $sql = q{
339                                    SELECT hosts.name  as host,
340                                               shares.name as share,
341                                               backups.num as backupnum
342                                    FROM hosts, backups, shares
343                                    WHERE shares.id=backups.shareid AND
344                                              hosts.id =backups.hostid AND
345                                              hosts.id=? AND
346                                              backups.num=?
347                            };
348            my $sth = $dbh->prepare($sql);
349            $sth->execute($hostID, $backupNum);
350    
351            my $row = $sth->fetchrow_hashref();
352    
353            return get_tgz_size_by_name(
354                    getGzipName($row->{'host'}, $row->{share}, $row->{'backupnum'})
355            );
356    }
357    
358  sub getBackupsNotBurned() {  sub getBackupsNotBurned() {
359    
360          my $dbh = get_dbh();          my $dbh = get_dbh();
361          my $sql = q{  
362          SELECT          my $sql = q{
363                  backups.hostID          AS hostid,                  SELECT
364                  min(hosts.name)         AS host,                          backups.hostID AS hostID,
365                  backups.num             AS backupnum,                          hosts.name AS host,
366                  min(backups.type)       AS type,                          shares.name AS share,
367                  min(backups.date)       AS date,                          backups.num AS backupnum,
368                  min(backups.size)       AS size                          backups.type AS type,
369          FROM files                          backups.date AS date,
370                  INNER JOIN shares       ON files.shareID=shares.ID                          backups.size AS size,
371                  INNER JOIN hosts        ON hosts.ID = shares.hostID                          backups.id AS id,
372                  INNER JOIN backups      ON backups.num = files.backupnum and backups.hostID = hosts.ID AND backups.shareID = shares.ID                          backups.inc_size AS inc_size
373          GROUP BY                  FROM backups
374                  backups.hostID, backups.num                  INNER JOIN shares       ON backups.shareID=shares.ID
375          ORDER BY min(backups.date)                  INNER JOIN hosts        ON backups.hostID = hosts.ID
376                    LEFT OUTER JOIN archive_backup ON archive_backup.backup_id = backups.id
377                    WHERE backups.inc_size > 0 AND backups.inc_deleted is false AND archive_backup.backup_id IS NULL
378                    GROUP BY
379                            backups.hostID,
380                            hosts.name,
381                            shares.name,
382                            backups.num,
383                            backups.shareid,
384                            backups.id,
385                            backups.type,
386                            backups.date,
387                            backups.size,
388                            backups.inc_size
389                    ORDER BY backups.date
390          };          };
391          my $sth = $dbh->prepare( $sql );          my $sth = $dbh->prepare( $sql );
392          my @ret;          my @ret;
# Line 265  sub getBackupsNotBurned() { Line 395  sub getBackupsNotBurned() {
395          while ( my $row = $sth->fetchrow_hashref() ) {          while ( my $row = $sth->fetchrow_hashref() ) {
396                  $row->{'age'} = sprintf("%0.1f", ( (time() - $row->{'date'}) / 86400 ) );                  $row->{'age'} = sprintf("%0.1f", ( (time() - $row->{'date'}) / 86400 ) );
397                  $row->{'size'} = sprintf("%0.2f", $row->{'size'} / 1024 / 1024);                  $row->{'size'} = sprintf("%0.2f", $row->{'size'} / 1024 / 1024);
398    
399                    # do some cluster calculation (approximate) and convert to kB
400                    $row->{'inc_size'} = int(($row->{'inc_size'} + 1023 ) / ( 2 * 1024 ) * 2);
401                  push @ret, $row;                  push @ret, $row;
402          }          }
403                
404          return @ret;                return @ret;      
405  }  }
406    
407  sub displayBackupsGrid()  sub displayBackupsGrid() {
408    {  
409        my $retHTML = "";          my $retHTML .= q{
410        my $addForm = 1;                  <form id="forma" method="POST" action="}.$MyURL.q{?action=burn">
411                  };
       if ($addForm) {  
412    
413              $retHTML .= <<EOF3;          $retHTML .= <<'EOF3';
414  <script language="javascript" type="text/javascript">  <style type="text/css">
415  <!--  <!--
416    DIV#fixedBox {
417            position: absolute;
418            top: 50em;
419            left: -24%;
420            padding: 0.5em;
421            width: 20%;
422            background-color: #E0F0E0;
423            border: 1px solid #00C000;
424    }
425    
426    DIV#fixedBox, DIV#fixedBox INPUT, DIV#fixedBox TEXTAREA {
427            font-size: 10pt;
428    }
429    
430    FORM>DIV#fixedBox {
431            position: fixed !important;
432            left: 0.5em !important;
433            top: auto !important;
434            bottom: 1em !important;
435            width: 15% !important;
436    }
437    
438    DIV#fixedBox INPUT[type=text], DIV#fixedBox TEXTAREA {
439            border: 1px solid #00C000;
440    }
441    
442    DIV#fixedBox #note {
443            display: block;
444            width: 100%;
445    }
446    
447    DIV#fixedBox #submitBurner {
448            display: block;
449            width: 100%;
450            margin-top: 0.5em;
451            cursor: pointer;
452    }
453    
454    * HTML {
455            overflow-y: hidden;
456    }
457    
458    * HTML BODY {
459            overflow-y: auto;
460            height: 100%;
461            font-size: 100%;
462    }
463    
464    * HTML DIV#fixedBox {
465            position: absolute;
466    }
467    
468    #mContainer, #gradient, #mask, #progressIndicator {
469            display: block;
470            width: 100%;
471            font-size: 10pt;
472            font-weight: bold;
473            text-align: center;
474            vertical-align: middle;
475            padding: 1px;
476    }
477    
478      function checkAll(location)  #gradient, #mask, #progressIndicator {
479      {          left: 0;
480        for (var i=0;i<document.forma.elements.length;i++)          border-width: 1px;
481        {          border-style: solid;
482          var e = document.forma.elements[i];          border-color: #000000;
483          if ((e.checked || !e.checked) && e.name != \'all\') {          color: #404040;
484              if (eval("document.forma."+location+".checked")) {          margin: 0.4em;
485                  e.checked = true;          position: absolute;
486              } else {          margin-left: -1px;
487                  e.checked = false;          margin-top: -1px;
488              }          margin-bottom: -1px;
489          }          overflow: hidden;
490        }  }
491      }  
492  //-->  #mContainer {
493  </script>                display: block;
494            position: relative;
495            padding: 0px;
496            margin-top: 0.4em;
497            margin-bottom: 0.5em;
498    }
499    
500    #gradient {
501            z-index: 1;
502            background-color: #FFFF00;
503    }
504    
505    #mask {
506            z-index: 2;
507            background-color: #FFFFFF;
508    }
509    
510    #progressIndicator {
511            z-index: 3;
512            background-color: transparent;
513    }
514    -->
515    </style>
516    <script type="text/javascript">
517    <!--
518    
519    var debug_div = null;
520  EOF3  EOF3
               $retHTML .= q{<form name="forma" method="GET" action="}."$MyURL"."?action=burn\"";  
               $retHTML.= q{<input type="hidden" value="burn" name="action">};  
               $retHTML .= q{<input type="hidden" value="results" name="search_results">};  
         }  
         $retHTML .= qq{  
                 <table style="fview" border="1" cellspacing="0" cellpadding="3">  
                 <tr class="tableheader">  
         };  
521    
522          if ($addForm) {          # take maximum archive size from configuration
523              $retHTML .= "<td class=\"tableheader\"><input type=\"checkbox\" name=\"allFiles\" onClick=\"checkAll('allFiles');\"></td>";          $retHTML .= 'var media_size = '. $Conf{MaxArchiveSize} .';';
524    
525            $retHTML .= <<'EOF3';
526    
527    function debug(msg) {
528    //      return; // Disable debugging
529    
530            if (! debug_div) debug_div = document.getElementById('debug');
531    
532            // this will create debug div if it doesn't exist.
533            if (! debug_div) {
534                    debug_div = document.createElement('div');
535                    if (document.body) document.body.appendChild(debug_div);
536                    else debug_div = null;
537          }          }
538          $retHTML .=  qq{          if (debug_div) {
539                  <td align="center">Host</td>                  debug_div.appendChild(document.createTextNode(msg));
540                  <td align="center">Backup no</td>                  debug_div.appendChild(document.createElement("br"));
541                  <td align="center">Type</td>          }
542                  <td align="center">date</td>  }
                 <td align="center">age/days</td>  
                 <td align="center">size/MB</td>  
                 </tr>  
         };  
543    
         my @backups = getBackupsNotBurned();  
         my $backup;  
544    
545          if ($addForm) {  var element_id_cache = Array();
546                  $retHTML .= qq{  
547                          <tr><td colspan=7 style="tableheader">  function element_id(name,element) {
548                          <input type="submit" value="Burn selected backups on medium" name="submitBurner">          if (! element_id_cache[name]) {
549                          </td></tr>                  element_id_cache[name] = self.document.getElementById(name);
                 };  
550          }          }
551            return element_id_cache[name];
552    }
553    
554          foreach $backup(@backups) {  function checkAll(location) {
555            var f = element_id('forma') || null;
556            if (!f) return false;
557    
558            var len = f.elements.length;
559            var check_all = element_id('allFiles');
560            var suma = check_all.checked ? (parseInt(f.elements['totalsize'].value) || 0) : 0;
561    
562            for (var i = 0; i < len; i++) {
563                    var e = f.elements[i];
564                    if (e.name != 'all' && e.name.substr(0, 3) == 'fcb') {
565                            if (check_all.checked) {
566                                    if (e.checked) continue;
567                                    var el = element_id("fss" + e.name.substr(3));
568                                    var size = parseInt(el.value) || 0;
569                                    debug('suma: '+suma+' size: '+size);
570                                    if ((suma + size) < media_size) {
571                                            suma += size;
572                                            e.checked = true;
573                                    } else {
574                                            break;
575                                    }
576                            } else {
577                                    e.checked = false;
578                            }
579                    }
580            }
581            update_sum(suma);
582    }
583    
584                  my $ftype = "";  function update_sum(suma) {
585                        element_id('forma').elements['totalsize'].value = suma;
586                  $retHTML .= "<tr>";          pbar_set(suma, media_size);
587                  if ($addForm) {          debug('total size: ' + suma);
588                          $retHTML .= '<td class="fview"><input type="checkbox" name="fcb' .  }
589                                  $backup->{'hostid'}.'_'.$backup->{'backupnum'} .  
590                                  '" value="' . $backup->{'hostid'}.'_'.$backup->{'backupnum'} .  function sumiraj(e) {
591                                  '"></td>';          var suma = parseInt(element_id('forma').elements['totalsize'].value) || 0;
592                  }                    var len = element_id('forma').elements.length;
593                        if (e) {
594                  $retHTML .= '<td class="fviewborder">' . $backup->{'host'} . '</td>' .                  var size = parseInt( element_id("fss" + e.name.substr(3)).value);
595                          '<td class="fviewborder">' . $backup->{'backupnum'} . '</td>' .                  if (e.checked) {
596                          '<td class="fviewborder">' . $backup->{'type'} . '</td>' .                          suma += size;
597                          '<td class="fviewborder">' . epoch_to_iso( $backup->{'date'} ) . '</td>' .                  } else {
598                          '<td class="fviewborder">' . $backup->{'age'} . '</td>' .                          suma -= size;
599                          '<td class="fviewborder">' . $backup->{'size'} . '</td>' .                  }
600                          '</tr>';          } else {
601                    suma = 0;
602                    for (var i = 0; i < len; i++) {
603                            var e = element_id('forma').elements[i];
604                            if (e.name != 'all' && e.checked && e.name.substr(0,3) == 'fcb') {
605                                    var el = element_id("fss" + e.name.substr(3));
606                                    if (el && el.value) suma += parseInt(el.value) || 0;
607                            }
608                    }
609          }          }
610            update_sum(suma);
611            return suma;
612    }
613    
614          $retHTML .= "</table>";  /* progress bar */
615    
616    var _pbar_width = null;
617    var _pbar_warn = 10;    // change color in last 10%
618    
619    function pbar_reset() {
620            element_id("mask").style.left = "0px";
621            _pbar_width = element_id("mContainer").offsetWidth - 2;
622            element_id("mask").style.width = _pbar_width + "px";
623            element_id("mask").style.display = "block";
624            element_id("progressIndicator").style.zIndex  = 10;
625            element_id("progressIndicator").innerHTML = "0";
626    }
627    
628    function dec2hex(d) {
629            var hch = '0123456789ABCDEF';
630            var a = d % 16;
631            var q = (d - a) / 16;
632            return hch.charAt(q) + hch.charAt(a);
633    }
634    
635    function pbar_set(amount, max) {
636            debug('pbar_set('+amount+', '+max+')');
637    
638            if (_pbar_width == null) {
639                    var _mc = element_id("mContainer");
640                    if (_pbar_width == null) _pbar_width = parseInt(_mc.offsetWidth ? (_mc.offsetWidth - 2) : 0) || null;
641                    if (_pbar_width == null) _pbar_width = parseInt(_mc.clientWidth ? (_mc.clientWidth + 2) : 0) || null;
642                    if (_pbar_width == null) _pbar_width = 0;
643            }
644    
645            var pcnt = Math.floor(amount * 100 / max);
646            var p90 = 100 - _pbar_warn;
647            var pcol = pcnt - p90;
648            if (Math.round(pcnt) <= 100) {
649                    if (pcol < 0) pcol = 0;
650                    var e = element_id("submitBurner");
651                    debug('enable_button');
652                    e.disabled = false;
653                    var a = e.getAttributeNode('disabled') || null;
654                    if (a) e.removeAttributeNode(a);
655            } else {
656                    debug('disable button');
657                    pcol = _pbar_warn;
658                    var e = element_id("submitBurner");
659                    if (!e.disabled) e.disabled = true;
660            }
661            var col_g = Math.floor((_pbar_warn - pcol) * 255 / _pbar_warn);
662            var col = '#FF' + dec2hex(col_g) + '00';
663    
664            //debug('pcol: '+pcol+' g:'+col_g+' _pbar_warn:'+ _pbar_warn + ' color: '+col);
665            element_id("gradient").style.backgroundColor = col;
666    
667            element_id("progressIndicator").innerHTML = pcnt + '%';
668            //element_id("progressIndicator").innerHTML = amount;
669    
670            element_id("mask").style.clip = 'rect(' + Array(
671                    '0px',
672                    element_id("mask").offsetWidth + 'px',
673                    element_id("mask").offsetHeight + 'px',
674                    Math.round(_pbar_width * amount / max) + 'px'
675            ).join(' ') + ')';
676    }
677    
678    if (!self.body) self.body = new Object();
679    self.onload = self.document.onload = self.body.onload = function() {
680            //pbar_reset();
681            sumiraj();
682    };
683    
684    // -->
685    </script>
686    <div id="fixedBox">
687    
688    Size: <input type="text" name="totalsize" size="7" readonly="readonly" style="text-align:right;" value="0" /> kB
689    
690    <div id="mContainer">
691            <div id="gradient">&nbsp;</div>
692            <div id="mask">&nbsp;</div>
693            <div id="progressIndicator">0%</div>
694    </div>
695    <br/>
696    
697    Note:
698    <textarea name="note" cols="10" rows="5" id="note"></textarea>
699    
700    <input type="submit" id="submitBurner" value="Burn selected" name="submitBurner" />
701    
702    </div>
703    <!--
704    <div id="debug" style="float: right; width: 10em; border: 1px #ff0000 solid; background-color: #ffe0e0; -moz-opacity: 0.7;">
705    no debug output yet
706    </div>
707    -->
708    EOF3
709            $retHTML .= q{
710                            <input type="hidden" value="burn" name="action">
711                            <input type="hidden" value="results" name="search_results">
712                            <table style="fview" border="0" cellspacing="0" cellpadding="2">
713                            <tr class="tableheader">
714                            <td class="tableheader">
715                                    <input type="checkbox" name="allFiles" id="allFiles" onClick="checkAll('allFiles');">
716                            </td>
717                            <td align="center">Share</td>
718                            <td align="center">Backup no</td>
719                            <td align="center">Type</td>
720                            <td align="center">date</td>
721                            <td align="center">age/days</td>
722                            <td align="center">size/MB</td>
723                            <td align="center">gzip size/kB</td>
724                            </tr>
725    
726          if ($addForm) {          };
727                  $retHTML .= "</form>";  
728            my @color = (' bgcolor="#e0e0e0"', '');
729    
730            my $i = 0;
731            my $host = '';
732    
733            foreach my $backup ( getBackupsNotBurned() ) {
734    
735                    if ($host ne $backup->{'host'}) {
736                            $i++;
737                            $host = $backup->{'host'};
738                    }
739                    my $ftype = "";
740    
741                    my $checkbox_key = $backup->{'hostid'}. '_' .$backup->{'backupnum'} . '_' . $backup->{'id'};
742    
743                    $retHTML .=
744                            '<tr' . $color[$i %2 ] . '>
745                            <td class="fview">';
746    
747                    if (($backup->{'inc_size'} || 0) > 0) {
748                            $retHTML .= '
749                            <input type="checkbox" name="fcb' . $checkbox_key . '" value="' . $checkbox_key . '" onClick="sumiraj(this);">';
750                    }
751    
752                    $retHTML .=
753                            '</td>' .
754                            '<td align="right">' . $backup->{'host'} . ':' . $backup->{'share'} . '</td>' .
755                            '<td align="center">' . $backup->{'backupnum'} . '</td>' .
756                            '<td align="center">' . $backup->{'type'} . '</td>' .
757                            '<td align="center">' . epoch_to_iso( $backup->{'date'} ) . '</td>' .
758                            '<td align="center">' . $backup->{'age'} . '</td>' .
759                            '<td align="right">' . $backup->{'size'} . '</td>' .
760                            '<td align="right">' . $backup->{'inc_size'} .
761                            '<input type="hidden" iD="fss'.$checkbox_key .'" value="'. $backup->{'inc_size'} .'"></td>' .
762    
763                            "</tr>\n";
764          }          }
765    
766            $retHTML .= "</table>";
767            $retHTML .= "</form>";
768                
769          return $retHTML;          return $retHTML;
770  }        }      

Legend:
Removed from v.88  
changed lines
  Added in v.194

  ViewVC Help
Powered by ViewVC 1.1.26