/[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 123 by dpavlin, Mon Sep 19 11:07:31 2005 UTC revision 143 by iklaric, Fri Oct 7 09:36:10 2005 UTC
# Line 293  sub getGzipName($$$) Line 293  sub getGzipName($$$)
293                    
294  }  }
295    
296    sub getGzipSize($$)
297    {
298            my ($hostID, $backupNum) = @_;
299            my $ret;
300            my $sql;
301            my $dbh = get_dbh();
302            
303            $sql = q{
304                                    SELECT hosts.name  as host,
305                                               shares.name as share,
306                                               backups.num as backupnum
307                                    FROM hosts, backups, shares
308                                    WHERE shares.id=backups.shareid AND
309                                              hosts.id =backups.hostid AND
310                                              hosts.id=? AND
311                                              backups.num=?;
312                            };
313            my $sth = $dbh->prepare($sql);
314            $sth->execute($hostID, $backupNUM);
315            my $row = $res->fetchrow_hashref();
316            
317            my (undef,undef,undef,undef,undef,undef,undef,$ret,undef,undef,undef,undef,undef) =
318                            stat( $Conf{InstallDir}.'/'.$Conf{GzipTempDir}.'/'.
319                                    getGzipName($row->{'host'}, $row->{share}, $row->{'backupnum'}));
320            
321            return $ret;    
322    }
323    
324  sub getBackupsNotBurned() {  sub getBackupsNotBurned() {
325    
326          my $dbh = get_dbh();          my $dbh = get_dbh();
# Line 309  sub getBackupsNotBurned() { Line 337  sub getBackupsNotBurned() {
337                  FROM backups                  FROM backups
338                  INNER JOIN shares       ON backups.shareID=shares.ID                  INNER JOIN shares       ON backups.shareID=shares.ID
339                  INNER JOIN hosts        ON backups.hostID = hosts.ID                  INNER JOIN hosts        ON backups.hostID = hosts.ID
340                  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
341                  WHERE backups.size > 0                  WHERE backups.size > 0 AND archive_backup.backup_id IS NULL
342                  GROUP BY                  GROUP BY
343                          backups.hostID,                          backups.hostID,
344                          hosts.name,                          hosts.name,
# Line 340  sub getBackupsNotBurned() { Line 368  sub getBackupsNotBurned() {
368          return @ret;                return @ret;      
369  }  }
370    
371  sub displayBackupsGrid()  sub displayBackupsGrid() {
372    {  
373        my $retHTML = "";          my $retHTML .= q{
374                          <form id="forma" method="POST" action="}.$MyURL.q{?action=burn">
375          $retHTML .= <<EOF3;          };
376  <script language="javascript" type="text/javascript">  
377            $retHTML .= <<'EOF3';
378    <style type="text/css">
379  <!--  <!--
380    DIV#fixedBox {
381            position: absolute;
382            top: 50em;
383            left: -24%;
384            padding: 0.5em;
385            width: 20%;
386            background-color: #E0F0E0;
387            border: 1px solid #00C000;
388    }
389    
390    DIV#fixedBox, DIV#fixedBox INPUT, DIV#fixedBox TEXTAREA {
391            font-size: 10pt;
392    }
393    
394    FORM>DIV#fixedBox {
395            position: fixed !important;
396            left: 0.5em !important;
397            top: auto !important;
398            bottom: 1em !important;
399            width: 15% !important;
400    }
401    
402    DIV#fixedBox INPUT[type=text], DIV#fixedBox TEXTAREA {
403            border: 1px solid #00C000;
404    }
405    
406    DIV#fixedBox #note {
407            display: block;
408            width: 100%;
409    }
410    
411    DIV#fixedBox #submitBurner {
412            display: block;
413            width: 100%;
414            margin-top: 0.5em;
415            cursor: pointer;
416    }
417    
418    * HTML {
419            overflow-y: hidden;
420    }
421    
422    * HTML BODY {
423            overflow-y: auto;
424            height: 100%;
425            font-size: 100%;
426    }
427    
428    * HTML DIV#fixedBox {
429            position: absolute;
430    }
431    
432    #mContainer, #gradient, #mask, #progressIndicator {
433            display: block;
434            width: 100%;
435            font-size: 10pt;
436            font-weight: bold;
437            text-align: center;
438            vertical-align: middle;
439            padding: 1px;
440    }
441    
442    #gradient, #mask, #progressIndicator {
443            left: 0;
444            border-width: 1px;
445            border-style: solid;
446            border-color: #000000;
447            color: #404040;
448            margin: 0.4em;
449            position: absolute;
450            margin-left: -1px;
451            margin-top: -1px;
452            margin-bottom: -1px;
453            overflow: hidden;
454    }
455    
456    #mContainer {
457            display: block;
458            position: relative;
459            padding: 0px;
460            margin-top: 0.4em;
461            margin-bottom: 0.5em;
462    }
463    
464    #gradient {
465            z-index: 1;
466            background-color: #FFFF00;
467    }
468    
469    #mask {
470            z-index: 2;
471            background-color: #FFFFFF;
472    }
473    
474    #progressIndicator {
475            z-index: 3;
476            background-color: transparent;
477    }
478    -->
479    </style>
480    <script type="text/javascript">
481    <!--
482    
483    var debug_div = null;
484    var media_size = 4400 * 1024;
485    
486    function debug(msg) {
487    //      return; // Disable debugging
488    
489            if (! debug_div) debug_div = document.getElementById('debug');
490    
491      function checkAll(location)          // this will create debug div if it doesn't exist.
492      {          if (! debug_div) {
493        for (var i=0;i<document.forma.elements.length;i++)                  debug_div = document.createElement('div');
494        {                  if (document.body) document.body.appendChild(debug_div);
495          var e = document.forma.elements[i];                  else debug_div = null;
496          if ((e.checked || !e.checked) && e.name != \'all\') {          }
497              if (eval("document.forma."+location+".checked")) {          if (debug_div) {
498                  e.checked = true;                  debug_div.appendChild(document.createTextNode(msg));
499              } else {                  debug_div.appendChild(document.createElement("br"));
500                  e.checked = false;          }
501              }  }
502          }  
503        }  
504      }  var element_id_cache = Array();
505        
506      function sumiraj()  function element_id(name,element) {
507      {          if (! element_id_cache[name]) {
508          var suma = 0;                  element_id_cache[name] = self.document.getElementById(name);
509          for (var i = 0; i < document.forma.elements.length; i++)              }
510                  {          return element_id_cache[name];
511                          var e = document.forma.elements[i];  }
512                          if ((e.checked || !e.checked) && e.name != \'all\')  
513                          {  function checkAll(location) {
514                                  if (e.checked)          var f = element_id('forma') || null;
515                                  {          if (!f) return false;
516                                          var ret = e.name.match("fcb(.*)");  
517                                          suma += parseInt(eval("document.forma.fss"+ret[1]+".value"));          var len = f.elements.length;
518                                                    var check_all = element_id('allFiles');
519            var suma = check_all.checked ? (parseInt(f.elements['totalsize'].value) || 0) : 0;
520    
521            for (var i = 0; i < len; i++) {
522                    var e = f.elements[i];
523                    if (e.name != 'all' && e.name.substr(0, 3) == 'fcb') {
524                            if (check_all.checked) {
525                                    if (e.checked) continue;
526                                    var el = element_id("fss" + e.name.substr(3));
527                                    var size = parseInt(el.value) || 0;
528                                    debug('suma: '+suma+' size: '+size);
529                                    if ((suma + size) < media_size) {
530                                            suma += size;
531                                            e.checked = true;
532                                    } else {
533                                            break;
534                                  }                                  }
535                          }                          } else {
536          }                                  e.checked = false;
537          document.forma.totalsize.value = suma;                          }
538                    }
539            }
540            update_sum(suma);
541    }
542    
543    function update_sum(suma) {
544            element_id('forma').elements['totalsize'].value = suma;
545            pbar_set(suma, media_size);
546            debug('total size: ' + suma);
547    }
548    
549    function sumiraj(e) {
550            var suma = parseInt(element_id('forma').elements['totalsize'].value) || 0;
551            var len = element_id('forma').elements.length;
552            if (e) {
553                    var size = parseInt( element_id("fss" + e.name.substr(3)).value);
554                    if (e.checked) {
555                            suma += size;
556                    } else {
557                            suma -= size;
558                    }
559            } else {
560                    suma = 0;
561                    for (var i = 0; i < len; i++) {
562                            var e = element_id('forma').elements[i];
563                            if (e.name != 'all' && e.checked && e.name.substr(0,3) == 'fcb') {
564                                    var el = element_id("fss" + e.name.substr(3));
565                                    if (el && el.value) suma += parseInt(el.value) || 0;
566                            }
567                    }
568            }
569            update_sum(suma);
570          return suma;          return suma;
571      }  }
572  //-->  
573  </script>        /* progress bar */
574    
575    var _pbar_width = null;
576    var _pbar_warn = 10;    // change color in last 10%
577    
578    function pbar_reset() {
579            element_id("mask").style.left = "0px";
580            _pbar_width = element_id("mContainer").offsetWidth - 2;
581            element_id("mask").style.width = _pbar_width + "px";
582            element_id("mask").style.display = "block";
583            element_id("progressIndicator").style.zIndex  = 10;
584            element_id("progressIndicator").innerHTML = "0";
585    }
586    
587    function dec2hex(d) {
588            var hch = '0123456789ABCDEF';
589            var a = d % 16;
590            var q = (d - a) / 16;
591            return hch.charAt(q) + hch.charAt(a);
592    }
593    
594    function pbar_set(amount, max) {
595            debug('pbar_set('+amount+', '+max+')');
596    
597            if (_pbar_width == null) {
598                    var _mc = element_id("mContainer");
599                    if (_pbar_width == null) _pbar_width = parseInt(_mc.offsetWidth ? (_mc.offsetWidth - 2) : 0) || null;
600                    if (_pbar_width == null) _pbar_width = parseInt(_mc.clientWidth ? (_mc.clientWidth + 2) : 0) || null;
601                    if (_pbar_width == null) _pbar_width = 0;
602            }
603    
604            var pcnt = Math.floor(amount * 100 / max);
605            var p90 = 100 - _pbar_warn;
606            var pcol = pcnt - p90;
607            if (Math.round(pcnt) <= 100) {
608                    if (pcol < 0) pcol = 0;
609                    var e = element_id("submitBurner");
610                    debug('enable_button');
611                    e.disabled = false;
612                    var a = e.getAttributeNode('disabled') || null;
613                    if (a) e.removeAttributeNode(a);
614            } else {
615                    debug('disable button');
616                    pcol = _pbar_warn;
617                    var e = element_id("submitBurner");
618                    if (!e.disabled) e.disabled = true;
619            }
620            var col_g = Math.floor((_pbar_warn - pcol) * 255 / _pbar_warn);
621            var col = '#FF' + dec2hex(col_g) + '00';
622    
623            //debug('pcol: '+pcol+' g:'+col_g+' _pbar_warn:'+ _pbar_warn + ' color: '+col);
624            element_id("gradient").style.backgroundColor = col;
625    
626            element_id("progressIndicator").innerHTML = pcnt + '%';
627            //element_id("progressIndicator").innerHTML = amount;
628    
629            element_id("mask").style.clip = 'rect(' + Array(
630                    '0px',
631                    element_id("mask").offsetWidth + 'px',
632                    element_id("mask").offsetHeight + 'px',
633                    Math.round(_pbar_width * amount / max) + 'px'
634            ).join(' ') + ')';
635    }
636    
637    if (!self.body) self.body = new Object();
638    self.onload = self.document.onload = self.body.onload = function() {
639            //pbar_reset();
640            sumiraj();
641    };
642    
643    // -->
644    </script>
645    <div id="fixedBox">
646    
647    Size: <input type="text" name="totalsize" size="7" readonly="readonly" style="text-align:right;" value="0" /> kB
648    
649    <div id="mContainer">
650            <div id="gradient">&nbsp;</div>
651            <div id="mask">&nbsp;</div>
652            <div id="progressIndicator">0%</div>
653    </div>
654    <br/>
655    
656    Note:
657    <textarea name="note" cols="10" rows="5" id="note"></textarea>
658    
659    <input type="submit" id="submitBurner" value="Burn selected" name="submitBurner" />
660    
661    </div>
662    <!--
663    <div id="debug" style="float: right; width: 10em; border: 1px #ff0000 solid; background-color: #ffe0e0; -moz-opacity: 0.7;">
664    no debug output yet
665    </div>
666    -->
667  EOF3  EOF3
668          $retHTML .= q{          $retHTML .= q{
                 <form name="forma" method="GET" action=};  
                 $retHTML .= "\"".$MyURL."\"";  
                 $retHTML .= q{?action=burn>  
669                          <input type="hidden" value="burn" name="action">                          <input type="hidden" value="burn" name="action">
670                          <input type="hidden" value="results" name="search_results">                          <input type="hidden" value="results" name="search_results">
671                          <table style="fview" border="0" cellspacing="0" cellpadding="2">                          <table style="fview" border="0" cellspacing="0" cellpadding="2">
672                          <tr class="tableheader">                          <tr class="tableheader">
673                          <td class="tableheader">                          <td class="tableheader">
674                                  <input type="checkbox" name="allFiles" onClick="checkAll('allFiles');">                                  <input type="checkbox" name="allFiles" id="allFiles" onClick="checkAll('allFiles');">
675                          </td>                          </td>
676                          <td align="center">Share</td>                          <td align="center">Share</td>
677                          <td align="center">Backup no</td>                          <td align="center">Backup no</td>
# Line 405  EOF3 Line 682  EOF3
682                          <td align="center">gzip size</td>                          <td align="center">gzip size</td>
683                          </tr>                          </tr>
684    
                         <tr><td colspan=7 style="tableheader">  
                         <input type="submit" value="Burn selected backups on medium" name="submitBurner">  
                         </td></tr>  
685          };          };
686    
687          my @color = (' bgcolor="#e0e0e0"', '');          my @color = (' bgcolor="#e0e0e0"', '');
# Line 422  EOF3 Line 696  EOF3
696                          $host = $backup->{'host'};                          $host = $backup->{'host'};
697                  }                  }
698                  my $ftype = "";                  my $ftype = "";
699                
                 $retHTML .= "<tr" . $color[$i %2 ] . ">";  
                 $retHTML .= '<td class="fview"><input type="checkbox" name="fcb' .  
                                                                                         $backup->{'hostid'}.'_'.$backup->{'backupnum'} .  
                                                                                         '" value="' . $backup->{'hostid'}.'_'.$backup->{'backupnum'} .  
                                                                                         '" onClick="sumiraj();"></td>';  
               
700                  $retHTML .=                  $retHTML .=
701                            '<tr' . $color[$i %2 ] . '>
702                            <td class="fview">';
703                    # FIXME
704                    $backup->{'fs_size'} = int($backup->{'size'} * 1024);
705                    if (($backup->{'fs_size'} || 0) > 0) {
706                            $retHTML .= '
707                            <input type="checkbox" name="fcb' .
708                            $backup->{'hostid'}.'_'.$backup->{'backupnum'} .
709                            '" value="' . $backup->{'hostid'}.'_'.$backup->{'backupnum'} .
710                            '" onClick="sumiraj(this);">';
711                    }
712                    $retHTML .=
713                            '</td>' .
714                          '<td align="right">' . $backup->{'host'} . ':' . $backup->{'share'} . '</td>' .                          '<td align="right">' . $backup->{'host'} . ':' . $backup->{'share'} . '</td>' .
715                          '<td align="center">' . $backup->{'backupnum'} . '</td>' .                          '<td align="center">' . $backup->{'backupnum'} . '</td>' .
716                          '<td align="center">' . $backup->{'type'} . '</td>' .                          '<td align="center">' . $backup->{'type'} . '</td>' .
# Line 437  EOF3 Line 718  EOF3
718                          '<td align="center">' . $backup->{'age'} . '</td>' .                          '<td align="center">' . $backup->{'age'} . '</td>' .
719                          '<td align="right">' . $backup->{'size'} . '</td>' .                          '<td align="right">' . $backup->{'size'} . '</td>' .
720                          '<td align="right">' . $backup->{'fs_size'} .                          '<td align="right">' . $backup->{'fs_size'} .
721                          '<input type="hidden" name="fss'.$backup->{'hostid'}.'_'.$backup->{'backupnum'} . '"'.                          '<input type="hidden" iD="fss'.$backup->{'hostid'}.'_'.$backup->{'backupnum'} . '" value="'. $backup->{'fs_size'} .'"></td>' .
                         'value="'. $backup->{'fs_size'} .'"'.'</td>' .  
                         "</tr>\n";  
   
722    
723                            "</tr>\n";
724          }          }
725    
726          $retHTML .= "</table>";          $retHTML .= "</table>";
         $retHTML .= "total gzip size:<input type=\"text\" name=\"totalsize\"><br>";  
         $retHTML .= "Note:<input type=\"text\" name=\"note\">";  
727          $retHTML .= "</form>";          $retHTML .= "</form>";
728                
729          return $retHTML;          return $retHTML;

Legend:
Removed from v.123  
changed lines
  Added in v.143

  ViewVC Help
Powered by ViewVC 1.1.26