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

Legend:
Removed from v.125  
changed lines
  Added in v.142

  ViewVC Help
Powered by ViewVC 1.1.26