/[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 128 by dpavlin, Thu Sep 22 13:31:04 2005 UTC revision 209 by dpavlin, Sun Oct 16 10:57:51 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 68  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 100  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 288  sub getGzipName($$$) Line 300  sub getGzipName($$$)
300          $ret =~ s/\\h/$host/ge;          $ret =~ s/\\h/$host/ge;
301          $ret =~ s/\\s/$share/ge;          $ret =~ s/\\s/$share/ge;
302          $ret =~ s/\\n/$backupnum/ge;          $ret =~ s/\\n/$backupnum/ge;
303            
304            $ret =~ s/__+/_/g;
305    
306          return $ret;          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();
# Line 302  sub getBackupsNotBurned() { Line 364  sub getBackupsNotBurned() {
364                          backups.hostID AS hostID,                          backups.hostID AS hostID,
365                          hosts.name AS host,                          hosts.name AS host,
366                          shares.name AS share,                          shares.name AS share,
367                          backups.id AS backupnum,                          backups.num AS backupnum,
368                          backups.type AS type,                          backups.type AS type,
369                          backups.date AS date,                          backups.date AS date,
370                          backups.size AS size                          backups.size AS size,
371                            backups.id AS id,
372                            backups.inc_size AS inc_size,
373                            backups.parts AS parts
374                  FROM backups                  FROM backups
375                  INNER JOIN shares       ON backups.shareID=shares.ID                  INNER JOIN shares       ON backups.shareID=shares.ID
376                  INNER JOIN hosts        ON backups.hostID = hosts.ID                  INNER JOIN hosts        ON backups.hostID = hosts.ID
377                  LEFT OUTER JOIN archive_backup ON archive_backup.backup_id = backups.id AND archive_backup.backup_id IS NULL                  LEFT OUTER JOIN archive_backup ON archive_backup.backup_id = backups.id
378                  WHERE backups.size > 0                  WHERE backups.inc_size > 0 AND backups.inc_deleted is false AND archive_backup.backup_id IS NULL
379                  GROUP BY                  GROUP BY
380                          backups.hostID,                          backups.hostID,
381                          hosts.name,                          hosts.name,
# Line 320  sub getBackupsNotBurned() { Line 385  sub getBackupsNotBurned() {
385                          backups.id,                          backups.id,
386                          backups.type,                          backups.type,
387                          backups.date,                          backups.date,
388                          backups.size                          backups.size,
389                            backups.inc_size,
390                            backups.parts
391                  ORDER BY backups.date                  ORDER BY backups.date
392          };          };
393          my $sth = $dbh->prepare( $sql );          my $sth = $dbh->prepare( $sql );
# Line 330  sub getBackupsNotBurned() { Line 397  sub getBackupsNotBurned() {
397          while ( my $row = $sth->fetchrow_hashref() ) {          while ( my $row = $sth->fetchrow_hashref() ) {
398                  $row->{'age'} = sprintf("%0.1f", ( (time() - $row->{'date'}) / 86400 ) );                  $row->{'age'} = sprintf("%0.1f", ( (time() - $row->{'date'}) / 86400 ) );
399                  $row->{'size'} = sprintf("%0.2f", $row->{'size'} / 1024 / 1024);                  $row->{'size'} = sprintf("%0.2f", $row->{'size'} / 1024 / 1024);
400                  my (undef,undef,undef,undef,undef,undef,undef,$fs_size,undef,undef,undef,undef,undef) =  
401                          stat( $Conf{InstallDir}.'/'.$Conf{GzipTempDir}.'/'.                  # do some cluster calculation (approximate) and convert to kB
402                                  getGzipName($row->{'host'}, $row->{share}, $row->{'backupnum'}));                  $row->{'inc_size'} = int(($row->{'inc_size'} + 1023 ) / ( 2 * 1024 ) * 2);
                 $row->{'fs_size'} = $fs_size;  
403                  push @ret, $row;                  push @ret, $row;
404          }          }
405                
# Line 343  sub getBackupsNotBurned() { Line 409  sub getBackupsNotBurned() {
409  sub displayBackupsGrid() {  sub displayBackupsGrid() {
410    
411          my $retHTML .= q{          my $retHTML .= q{
412                  <form id="forma" method="POST" action=};                  <form id="forma" method="POST" action="}.$MyURL.q{?action=burn">
                 $retHTML .= "\"".$MyURL."\"";  
                 $retHTML .= q{?action=burn>  
413          };          };
414    
415          $retHTML .= <<'EOF3';          $retHTML .= <<'EOF3';
416  <style>  <style type="text/css">
417  <!--  <!--
418    DIV#fixedBox {
 div#fixedBox {  
419          position: absolute;          position: absolute;
420          bottom: 1em;          top: 50em;
421          left: 0.5em;          left: -24%;
422          padding: 0.5em;          padding: 0.5em;
423          width: 10em;          width: 20%;
424          background: #e0f0e0;          background-color: #E0F0E0;
425          border: 1px solid #00ff00;          border: 1px solid #00C000;
 }  
 @media screen {  
         div#fixedBox {  
                 position: fixed;  
         }  
         /* Don't do this at home */  
         * html {  
                 overflow-y: hidden;  
         }  
         * html body {  
                 overflow-y: auto;  
                 height: 100%;  
                 padding: 0 1em 0 12em;  
                 font-size: 100%;  
         }  
         * html div#fixedBox {  
                 position: absolute;      
         }  
         /* All done. */  
426  }  }
427    
428  #mContainer {  DIV#fixedBox, DIV#fixedBox INPUT, DIV#fixedBox TEXTAREA {
429          position: relative;          font-size: 10pt;
430    }
431    
432    FORM>DIV#fixedBox {
433            position: fixed !important;
434            left: 0.5em !important;
435            top: auto !important;
436            bottom: 1em !important;
437            width: 15% !important;
438    }
439    
440    DIV#fixedBox INPUT[type=text], DIV#fixedBox TEXTAREA {
441            border: 1px solid #00C000;
442    }
443    
444    DIV#fixedBox #note {
445            display: block;
446          width: 100%;          width: 100%;
         height: 1.1em;  
         padding: 0px;  
         border: 1px solid #000000;  
447  }  }
448    
449  #gradient {  DIV#fixedBox #submitBurner {
450          position: absolute;          display: block;
         top: 0px;  
         left: 0px;  
451          width: 100%;          width: 100%;
452            margin-top: 0.5em;
453            cursor: pointer;
454    }
455    
456    * HTML {
457            overflow-y: hidden;
458    }
459    
460    * HTML BODY {
461            overflow-y: auto;
462          height: 100%;          height: 100%;
463          display: block;          font-size: 100%;
         background-color: #ffff00;  
464  }  }
465    
466  #mask {  * HTML DIV#fixedBox {
467          position: absolute;          position: absolute;
468          top: 0px;  }
469          left: 0px;  
470    #mContainer, #gradient, #mask, #progressIndicator {
471            display: block;
472          width: 100%;          width: 100%;
473          height: 100%;          font-size: 10pt;
474            font-weight: bold;
475            text-align: center;
476            vertical-align: middle;
477            padding: 1px;
478    }
479    
480    #gradient, #mask, #progressIndicator {
481            left: 0;
482            border-width: 1px;
483            border-style: solid;
484            border-color: #000000;
485            color: #404040;
486            margin: 0.4em;
487            position: absolute;
488            margin-left: -1px;
489            margin-top: -1px;
490            margin-bottom: -1px;
491            overflow: hidden;
492    }
493    
494    #mContainer {
495          display: block;          display: block;
496          font-size: 1px;          position: relative;
497            padding: 0px;
498            margin-top: 0.4em;
499            margin-bottom: 0.5em;
500    }
501    
502    #gradient {
503            z-index: 1;
504            background-color: #FFFF00;
505    }
506    
507    #mask {
508            z-index: 2;
509          background-color: #FFFFFF;          background-color: #FFFFFF;
         overflow: hidden;  
510  }  }
511    
512  #progressIndicator {  #progressIndicator {
513          position: absolute;          z-index: 3;
514          top: 0px;          background-color: transparent;
515          left: 0px;  }
516    
517    #parts {
518            padding: 0.4em;
519            display: none;
520          width: 100%;          width: 100%;
521          height: 100%;          font-size: 80%;
522          display: block;          color: #ff0000;
         font-weight: bold;  
         color: #404040;  
         font-size: 10pt;  
523          text-align: center;          text-align: center;
524  }  }
   
525  -->  -->
526  </style>  </style>
527  <script language="javascript" type="text/javascript">  <script type="text/javascript">
528  <!--  <!--
529    
530  var debug_div = null;  var debug_div = null;
531  var media_size = 4400 * 1024;  EOF3
532    
533            # take maximum archive size from configuration
534            $retHTML .= 'var media_size = '. $Conf{MaxArchiveSize} .';';
535    
536            $retHTML .= <<'EOF3';
537    
538  function debug(msg) {  function debug(msg) {
539  //      return; // Disable debugging          return; // Disable debugging
540    
541          if (! debug_div) debug_div = document.getElementById('debug');          if (! debug_div) debug_div = document.getElementById('debug');
542    
# Line 460  function element_id(name,element) { Line 563  function element_id(name,element) {
563  }  }
564    
565  function checkAll(location) {  function checkAll(location) {
566          var len = element_id('forma').elements.length;          var f = element_id('forma') || null;
567            if (!f) return false;
568    
569            var len = f.elements.length;
570          var check_all = element_id('allFiles');          var check_all = element_id('allFiles');
571            var suma = check_all.checked ? (parseInt(f.elements['totalsize'].value) || 0) : 0;
572    
573          for (var i = 0; i < len; i++) {          for (var i = 0; i < len; i++) {
574                    var e = f.elements[i];
575                  var e = element_id('forma').elements[i];                  if (e.name != 'all' && e.name.substr(0, 3) == 'fcb') {
                 if ((e.checked || !e.checked) && e.name != 'all') {  
576                          if (check_all.checked) {                          if (check_all.checked) {
577                                  e.checked = true;                                  if (e.checked) continue;
578                                    var el = element_id("fss" + e.name.substr(3));
579                                    var size = parseInt(el.value) || 0;
580                                    debug('suma: '+suma+' size: '+size);
581                                    if ((suma + size) < media_size) {
582                                            suma += size;
583                                            e.checked = true;
584                                    } else {
585                                            break;
586                                    }
587                          } else {                          } else {
588                                  e.checked = false;                                  e.checked = false;
589                          }                          }
590                  }                  }
591          }          }
592            update_sum(suma);
593    }
594    
595          sumiraj();  function update_sum(suma, suma_disp) {
596            if (! suma_disp) suma_disp = suma;
597            element_id('forma').elements['totalsize'].value = suma_disp;
598            pbar_set(suma, media_size);
599            debug('total size: ' + suma);
600  }  }
601        
602  function sumiraj(e) {  function sumiraj(e) {
603          var suma = parseInt(element_id('forma').totalsize.value) || 0;          var suma = parseInt(element_id('forma').elements['totalsize'].value) || 0;
604          var len = element_id('forma').elements.length;          var len = element_id('forma').elements.length;
605          if (e) {          if (e) {
606                  var size = parseInt( element_id("fss" + e.name.substr(3)).value );                  var size = parseInt( element_id("fss" + e.name.substr(3)).value);
607                  if (e.checked) {                  if (e.checked) {
608                          suma += size;                          suma += size;
609                  } else {                  } else {
610                          suma -= size;                          suma -= size;
611                  }                  }
612    
613                    var parts = parseInt( element_id("prt" + e.name.substr(3)).value);
614                    if (suma > media_size && suma == size && parts > 1) {
615                            element_id("parts").innerHTML = "This will take "+parts+" mediums!";
616                            element_id("parts").style.display = 'block';
617                            update_sum(media_size, suma);
618                            suma = media_size;
619                            return suma;
620                    } else {
621                            element_id("parts").style.display = 'none';
622                    }
623    
624                    if (suma < 0) suma = 0;
625          } else {          } else {
626                  suma = 0;                  suma = 0;
627                  for (var i = 0; i < len; i++) {                  for (var i = 0; i < len; i++) {
# Line 498  function sumiraj(e) { Line 632  function sumiraj(e) {
632                          }                          }
633                  }                  }
634          }          }
635          element_id('forma').totalsize.value = suma;          update_sum(suma);
         pbar_set(suma, media_size);  
         debug('total size: '+suma);  
636          return suma;          return suma;
637  }  }
638    
639  /* progress bar */  /* progress bar */
640    
641  var _pbar_width = 0;  var _pbar_width = null;
642  var _pbar_warn = 10;    // change color in last 10%  var _pbar_warn = 10;    // change color in last 10%
643    
644  function pbar_reset() {  function pbar_reset() {
645          element_id("mask").style.left = "0px";          element_id("mask").style.left = "0px";
646          _pbar_width = element_id("mContainer").offsetWidth - 2;          _pbar_width = element_id("mContainer").offsetWidth - 2;
647          element_id("mask").style.width = _pbar_width + "px";          element_id("mask").style.width = _pbar_width + "px";
         element_id("progressIndicator").style.zIndex  = 10;  
648          element_id("mask").style.display = "block";          element_id("mask").style.display = "block";
649            element_id("progressIndicator").style.zIndex  = 10;
650          element_id("progressIndicator").innerHTML = "0";          element_id("progressIndicator").innerHTML = "0";
651  }  }
652    
653  function dec2hex(d) {  function dec2hex(d) {
654          var hch="0123456789ABCDEF";          var hch = '0123456789ABCDEF';
655          var a=d%16;          var a = d % 16;
656          var q=(d-a)/16;          var q = (d - a) / 16;
657          return hch.charAt(q)+hch.charAt(a);          return hch.charAt(q) + hch.charAt(a);
658  }  }
659    
   
660  function pbar_set(amount, max) {  function pbar_set(amount, max) {
661            debug('pbar_set('+amount+', '+max+')');
662    
663          debug('pbar_set( '+amount+' , '+max+' )');          if (_pbar_width == null) {
664                    var _mc = element_id("mContainer");
665          curWidth = parseInt(element_id("mask").offsetWidth);                  if (_pbar_width == null) _pbar_width = parseInt(_mc.offsetWidth ? (_mc.offsetWidth - 2) : 0) || null;
666          curLeft = parseInt(element_id("mask").offsetLeft);                  if (_pbar_width == null) _pbar_width = parseInt(_mc.clientWidth ? (_mc.clientWidth + 2) : 0) || null;
667                    if (_pbar_width == null) _pbar_width = 0;
668            }
669    
670          var pcnt = Math.floor( amount * 100 / max );          var pcnt = Math.floor(amount * 100 / max);
671          var p90 = 100 - _pbar_warn;          var p90 = 100 - _pbar_warn;
672          var pcol = pcnt - p90;          var pcol = pcnt - p90;
673          if (pcol < _pbar_warn) {          if (Math.round(pcnt) <= 100) {
674                  if (pcol < 0) pcol = 0;                  if (pcol < 0) pcol = 0;
675                  var e = element_id("submitBurner");                  var e = element_id("submitBurner");
676                  if (e && e.disabled) {                  debug('enable_button');
677                          debug('enable_button');                  e.disabled = false;
678                          var a = e.getAttributeNode('disabled') || null;                  var a = e.getAttributeNode('disabled') || null;
679                          if (a) e.removeAttributeNode(a);                  if (a) e.removeAttributeNode(a);
680                  }          } else {
         } else if (pcol > _pbar_warn) {  
681                  debug('disable button');                  debug('disable button');
682                  pcol = _pbar_warn;                  pcol = _pbar_warn;
683                  var e = element_id("submitBurner");                  var e = element_id("submitBurner");
684                  if (! e.disabled) e.disabled = true;                  if (!e.disabled) e.disabled = true;
685          }          }
686          var col_g = Math.floor( ( _pbar_warn - pcol ) * 255 / _pbar_warn );          var col_g = Math.floor((_pbar_warn - pcol) * 255 / _pbar_warn);
687          var col = '#ff' + dec2hex( col_g ) + '00';          var col = '#FF' + dec2hex(col_g) + '00';
688    
689          //debug('pcol: '+pcol+' g:'+col_g+' _pbar_warn:'+ _pbar_warn + ' color: '+col);          //debug('pcol: '+pcol+' g:'+col_g+' _pbar_warn:'+ _pbar_warn + ' color: '+col);
690          element_id("gradient").style.backgroundColor = col;          element_id("gradient").style.backgroundColor = col;
691    
         var size = parseInt( _pbar_width * amount / max );  
   
         curWidth = _pbar_width - size;  
         curLeft = size ;  
   
         //debug('size: '+size+' curWidth '+curWidth+' curLeft: '+curLeft);  
   
692          element_id("progressIndicator").innerHTML = pcnt + '%';          element_id("progressIndicator").innerHTML = pcnt + '%';
693          //element_id("progressIndicator").innerHTML = amount;          //element_id("progressIndicator").innerHTML = amount;
694    
695          if (curLeft > _pbar_width) {          element_id("mask").style.clip = 'rect(' + Array(
696                  element_id("mask").style.display = "none";                  '0px',
697                  return;                  element_id("mask").offsetWidth + 'px',
698          } else {                  element_id("mask").offsetHeight + 'px',
699                  element_id("mask").style.display = "";                  Math.round(_pbar_width * amount / max) + 'px'
700          }          ).join(' ') + ')';
   
         //if(parseInt(element_id("mask").offsetWidth)>10)  
         element_id("mask").style.width = curWidth + "px";  
         element_id("mask").style.left = curLeft + "px";  
   
701  }  }
702    
703  if (!self.body) self.body = new Object();  if (!self.body) self.body = new Object();
704  self.onload = self.document.onload = self.body.onload = function() {  self.onload = self.document.onload = self.body.onload = function() {
705          pbar_reset();          //pbar_reset();
706          sumiraj();          sumiraj();
707  }  };
708    
709  //-->  // -->
710  </script>  </script>
711  <div id="fixedBox">  <div id="fixedBox">
712    
713  Size:  Size: <input type="text" name="totalsize" size="7" readonly="readonly" style="text-align:right;" value="0" /> kB
 <input type="text" name="totalsize" size="7" readonly>  
714    
715  <div id="mContainer">  <div id="mContainer">
716          <div id="gradient"></div>          <div id="gradient">&nbsp;</div>
717          <div id="mask"></div>          <div id="mask">&nbsp;</div>
718          <div id="progressIndicator">&nbsp;</div>          <div id="progressIndicator">0%</div>
719  </div>  </div>
   
720  <br/>  <br/>
721    
722    <div id="parts">&nbsp;</div>
723    
724  Note:  Note:
725  <br/>  <textarea name="note" cols="10" rows="5" id="note"></textarea>
726  <textarea name="note" cols="10" rows="5">  
727  </textarea>  <input type="submit" id="submitBurner" value="Burn selected" name="submitBurner" />
 <br/>  
 <input type="submit" id="submitBurner" value="Burn selected" name="submitBurner">  
728    
729  </div>  </div>
730    <!--
731  <div id="debug" style="float: right; width: 10em; border: 1px #ff0000 solid; background-color: #ffe0e0; -moz-opacity: 0.7;">  <div id="debug" style="float: right; width: 10em; border: 1px #ff0000 solid; background-color: #ffe0e0; -moz-opacity: 0.7;">
732  no debug output yet  no debug output yet
733  </div>  </div>
734    -->
735  EOF3  EOF3
736          $retHTML .= q{          $retHTML .= q{
737                          <input type="hidden" value="burn" name="action">                          <input type="hidden" value="burn" name="action">
# Line 626  EOF3 Line 747  EOF3
747                          <td align="center">date</td>                          <td align="center">date</td>
748                          <td align="center">age/days</td>                          <td align="center">age/days</td>
749                          <td align="center">size/MB</td>                          <td align="center">size/MB</td>
750                          <td align="center">gzip size</td>                          <td align="center">gzip size/kB</td>
751                          </tr>                          </tr>
752    
753          };          };
# Line 644  EOF3 Line 765  EOF3
765                  }                  }
766                  my $ftype = "";                  my $ftype = "";
767    
768                    my $checkbox_key = $backup->{'hostid'}. '_' .$backup->{'backupnum'} . '_' . $backup->{'id'};
769    
770                  $retHTML .=                  $retHTML .=
771                          '<tr' . $color[$i %2 ] . '>                          '<tr' . $color[$i %2 ] . '>
772                          <td class="fview">';                          <td class="fview">';
773                  # FIXME  
774                  $backup->{'fs_size'} = int($backup->{'size'} * 1024);                  if (($backup->{'inc_size'} || 0) > 0) {
                 if (($backup->{'fs_size'} || 0) > 0) {  
775                          $retHTML .= '                          $retHTML .= '
776                          <input type="checkbox" name="fcb' .                          <input type="checkbox" name="fcb' . $checkbox_key . '" value="' . $checkbox_key . '" onClick="sumiraj(this);">';
                         $backup->{'hostid'}.'_'.$backup->{'backupnum'} .  
                         '" value="' . $backup->{'hostid'}.'_'.$backup->{'backupnum'} .  
                         '" onClick="sumiraj(this);">';  
777                  }                  }
778    
779                  $retHTML .=                  $retHTML .=
780                          '</td>' .                          '</td>' .
781                          '<td align="right">' . $backup->{'host'} . ':' . $backup->{'share'} . '</td>' .                          '<td align="right">' . $backup->{'host'} . ':' . $backup->{'share'} . '</td>' .
# Line 664  EOF3 Line 784  EOF3
784                          '<td align="center">' . epoch_to_iso( $backup->{'date'} ) . '</td>' .                          '<td align="center">' . epoch_to_iso( $backup->{'date'} ) . '</td>' .
785                          '<td align="center">' . $backup->{'age'} . '</td>' .                          '<td align="center">' . $backup->{'age'} . '</td>' .
786                          '<td align="right">' . $backup->{'size'} . '</td>' .                          '<td align="right">' . $backup->{'size'} . '</td>' .
787                          '<td align="right">' . $backup->{'fs_size'} .                          '<td align="right">' . $backup->{'inc_size'} .
788                          '<input type="hidden" iD="fss'.$backup->{'hostid'}.'_'.$backup->{'backupnum'} . '" value="'. $backup->{'fs_size'} .'"></td>' .                          '<input type="hidden" id="fss'.$checkbox_key .'" value="'. $backup->{'inc_size'} .'"></td>' .
789                            '<input type="hidden" id="prt'.$checkbox_key .'" value="'. $backup->{'parts'} .'"></td>' .
790    
791                          "</tr>\n";                          "</tr>\n";
792          }          }
# Line 741  sub displayGrid($) { Line 862  sub displayGrid($) {
862                  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, @_);
863          }          }
864    
865            my $sth_archived;
866            my %archived_cache;
867    
868            sub check_archived($$$) {
869                    my ($host, $share, $num) = @_;
870    
871                    if (my $html = $archived_cache{"$host $share $num"}) {
872                            return $html;
873                    }
874    
875                    $sth_archived ||= $dbh->prepare(qq{
876                            select
877                                    dvd_nr, note,
878                                    count(archive_burned.copy) as copies
879                            from archive
880                            inner join archive_burned on archive_burned.archive_id = archive.id
881                            inner join archive_backup on archive.id = archive_backup.archive_id
882                            inner join backups on backups.id = archive_backup.backup_id
883                            inner join hosts on hosts.id = backups.hostid
884                            inner join shares on shares.id = backups.shareid
885                            where hosts.name = ? and shares.name = ? and backups.num = ?
886                            group by dvd_nr, note
887                    });
888    
889                    my @mediums;
890    
891                    $sth_archived->execute($host, $share, $num);
892                    while (my $row = $sth_archived->fetchrow_hashref()) {
893                            push @mediums, '<abbr title="' .
894                                    $row->{'note'} .
895                                    ' [' . $row->{'copies'} . ']' .
896                                    '">' .$row->{'dvd_nr'} .
897                                    '</abbr>';
898                    }
899    
900                    my $html = join(", ",@mediums);
901                    $archived_cache{"$host $share $num"} = $html;
902                    return $html;
903            }
904    
905          my $i = $offset * $on_page;          my $i = $offset * $on_page;
906    
907          foreach $file (@{ $files }) {          foreach $file (@{ $files }) {
# Line 757  sub displayGrid($) { Line 918  sub displayGrid($) {
918                          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>} .
919                          qq{<td class="fviewborder" align="right">} . $file->{'size'} . qq{</td>} .                          qq{<td class="fviewborder" align="right">} . $file->{'size'} . qq{</td>} .
920                          qq{<td class="fviewborder">} . epoch_to_iso( $file->{'date'} ) . qq{</td>} .                          qq{<td class="fviewborder">} . epoch_to_iso( $file->{'date'} ) . qq{</td>} .
921                          qq{<td class="fviewborder">} . '?' . qq{</td>};                          qq{<td class="fviewborder">} . check_archived( $file->{'hname'}, $file->{'sname'}, $file->{'backupnum'} ) . qq{</td>};
922    
923                  $retHTML .= "</tr>";                  $retHTML .= "</tr>";
924          }          }

Legend:
Removed from v.128  
changed lines
  Added in v.209

  ViewVC Help
Powered by ViewVC 1.1.26