/[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 211 by dpavlin, Sun Oct 16 10:57:55 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 108  sub getWhere($) { Line 120  sub getWhere($) {
120          return join(" and ", @conditions);          return join(" and ", @conditions);
121  }  }
122    
123    my $sort_def = {
124            default => 'date_a',
125            sql => {
126                    share_d => 'shares.name DESC',
127                    share_a => 'shares.name ASC',
128                    path_d => 'files.path DESC',
129                    path_a => 'files.path ASC',
130                    num_d => 'files.backupnum DESC',
131                    num_a => 'files.backupnum ASC',
132                    size_d => 'files.size DESC',
133                    size_a => 'files.size ASC',
134                    date_d => 'files.date DESC',
135                    date_a => 'files.date ASC',
136            },
137            est => {
138                    share_d => 'sname STRD',
139                    share_a => 'sname STRA',
140                    path_d => 'filepath STRD',
141                    path_a => 'filepath STRA',
142                    num_d => 'backupnum NUMD',
143                    num_a => 'backupnum NUMA',
144                    size_d => 'size NUMD',
145                    size_a => 'size NUMA',
146                    date_d => 'date NUMD',
147                    date_a => 'date NUMA',
148            }
149    };
150    
151    sub getSort($$) {
152            my ($type, $sort_order) = @_;
153    
154            $sort_order ||= $sort_def->{'default'};
155    
156            die "unknown type: $type" unless ($sort_def->{$type});
157    
158            if (my $ret = $sort_def->{$type}->{$sort_order}) {
159                    return $ret;
160            } else {
161                    # fallback to default sort order
162                    return $sort_def->{$type}->{ $sort_def->{'default'} };
163            }
164    }
165    
166  sub getFiles($) {  sub getFiles($) {
167          my ($param) = @_;          my ($param) = @_;
# Line 139  sub getFiles($) { Line 193  sub getFiles($) {
193          my $where = getWhere($param);          my $where = getWhere($param);
194          $sql_where = " WHERE ". $where if ($where);          $sql_where = " WHERE ". $where if ($where);
195    
196            my $order = getSort('sql', $param->{'sort'});
197    
198          my $sql_order = qq{          my $sql_order = qq{
199                  ORDER BY files.date                  ORDER BY $order
200                  LIMIT $on_page                  LIMIT $on_page
201                  OFFSET ?                  OFFSET ?
202          };          };
# Line 239  sub getFilesHyperEstraier($) { Line 295  sub getFilesHyperEstraier($) {
295    
296  #       $cond->set_max( $offset + $on_page );  #       $cond->set_max( $offset + $on_page );
297          $cond->set_options( $HyperEstraier::Condition::SURE );          $cond->set_options( $HyperEstraier::Condition::SURE );
298          $cond->set_order( 'date NUMA' );          $cond->set_order( getSort('est', $param->{'sort'} ) );
299    
300          # get the result of search          # get the result of search
301          my @res;          my @res;
# Line 270  sub getFilesHyperEstraier($) { Line 326  sub getFilesHyperEstraier($) {
326                  }                  }
327    
328                  my $row;                  my $row;
329                  foreach my $c (qw/fid hname sname backupnum fiilename filepath date type size/) {                  foreach my $c (qw/fid hname sname backupnum filepath date type size/) {
330                          $row->{$c} = $doc->attr($c);                          $row->{$c} = $doc->attr($c);
331                  }                  }
332                  push @res, $row;                  push @res, $row;
# Line 288  sub getGzipName($$$) Line 344  sub getGzipName($$$)
344          $ret =~ s/\\h/$host/ge;          $ret =~ s/\\h/$host/ge;
345          $ret =~ s/\\s/$share/ge;          $ret =~ s/\\s/$share/ge;
346          $ret =~ s/\\n/$backupnum/ge;          $ret =~ s/\\n/$backupnum/ge;
347            
348            $ret =~ s/__+/_/g;
349    
350          return $ret;          return $ret;
351                    
352  }  }
353    
354    sub get_tgz_size_by_name($) {
355            my $name = shift;
356    
357            my $tgz = $Conf{InstallDir}.'/'.$Conf{GzipTempDir}.'/'.$name;
358    
359            my $size = -1;
360    
361            if (-f $tgz) {
362                    $size = (stat($tgz))[7];
363            } elsif (-d $tgz) {
364                    opendir(my $dir, $tgz) || die "can't opendir $tgz: $!";
365                    my @parts = grep { !/^\./ && -f "$tgz/$_" } readdir($dir);
366                    $size = 0;
367                    foreach my $part (@parts) {
368                            $size += (stat("$tgz/$part"))[7] || die "can't stat $tgz/$part: $!";
369                    }
370                    closedir $dir;
371            }
372    
373            return $size;
374    }
375    
376    sub getGzipSize($$)
377    {
378            my ($hostID, $backupNum) = @_;
379            my $sql;
380            my $dbh = get_dbh();
381            
382            $sql = q{
383                                    SELECT hosts.name  as host,
384                                               shares.name as share,
385                                               backups.num as backupnum
386                                    FROM hosts, backups, shares
387                                    WHERE shares.id=backups.shareid AND
388                                              hosts.id =backups.hostid AND
389                                              hosts.id=? AND
390                                              backups.num=?
391                            };
392            my $sth = $dbh->prepare($sql);
393            $sth->execute($hostID, $backupNum);
394    
395            my $row = $sth->fetchrow_hashref();
396    
397            return get_tgz_size_by_name(
398                    getGzipName($row->{'host'}, $row->{share}, $row->{'backupnum'})
399            );
400    }
401    
402  sub getBackupsNotBurned() {  sub getBackupsNotBurned() {
403    
404          my $dbh = get_dbh();          my $dbh = get_dbh();
# Line 302  sub getBackupsNotBurned() { Line 408  sub getBackupsNotBurned() {
408                          backups.hostID AS hostID,                          backups.hostID AS hostID,
409                          hosts.name AS host,                          hosts.name AS host,
410                          shares.name AS share,                          shares.name AS share,
411                          backups.id AS backupnum,                          backups.num AS backupnum,
412                          backups.type AS type,                          backups.type AS type,
413                          backups.date AS date,                          backups.date AS date,
414                          backups.size AS size                          backups.size AS size,
415                            backups.id AS id,
416                            backups.inc_size AS inc_size,
417                            backups.parts AS parts
418                  FROM backups                  FROM backups
419                  INNER JOIN shares       ON backups.shareID=shares.ID                  INNER JOIN shares       ON backups.shareID=shares.ID
420                  INNER JOIN hosts        ON backups.hostID = hosts.ID                  INNER JOIN hosts        ON backups.hostID = hosts.ID
421                  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
422                  WHERE backups.size > 0                  WHERE backups.inc_size > 0 AND backups.inc_deleted is false AND archive_backup.backup_id IS NULL
423                  GROUP BY                  GROUP BY
424                          backups.hostID,                          backups.hostID,
425                          hosts.name,                          hosts.name,
# Line 320  sub getBackupsNotBurned() { Line 429  sub getBackupsNotBurned() {
429                          backups.id,                          backups.id,
430                          backups.type,                          backups.type,
431                          backups.date,                          backups.date,
432                          backups.size                          backups.size,
433                            backups.inc_size,
434                            backups.parts
435                  ORDER BY backups.date                  ORDER BY backups.date
436          };          };
437          my $sth = $dbh->prepare( $sql );          my $sth = $dbh->prepare( $sql );
# Line 330  sub getBackupsNotBurned() { Line 441  sub getBackupsNotBurned() {
441          while ( my $row = $sth->fetchrow_hashref() ) {          while ( my $row = $sth->fetchrow_hashref() ) {
442                  $row->{'age'} = sprintf("%0.1f", ( (time() - $row->{'date'}) / 86400 ) );                  $row->{'age'} = sprintf("%0.1f", ( (time() - $row->{'date'}) / 86400 ) );
443                  $row->{'size'} = sprintf("%0.2f", $row->{'size'} / 1024 / 1024);                  $row->{'size'} = sprintf("%0.2f", $row->{'size'} / 1024 / 1024);
444                  my (undef,undef,undef,undef,undef,undef,undef,$fs_size,undef,undef,undef,undef,undef) =  
445                          stat( $Conf{InstallDir}.'/'.$Conf{GzipTempDir}.'/'.                  # do some cluster calculation (approximate) and convert to kB
446                                  getGzipName($row->{'host'}, $row->{share}, $row->{'backupnum'}));                  $row->{'inc_size'} = int(($row->{'inc_size'} + 1023 ) / ( 2 * 1024 ) * 2);
                 $row->{'fs_size'} = $fs_size;  
447                  push @ret, $row;                  push @ret, $row;
448          }          }
449                
# Line 343  sub getBackupsNotBurned() { Line 453  sub getBackupsNotBurned() {
453  sub displayBackupsGrid() {  sub displayBackupsGrid() {
454    
455          my $retHTML .= q{          my $retHTML .= q{
456                  <form id="forma" method="POST" action=};                  <form id="forma" method="POST" action="}.$MyURL.q{?action=burn">
                 $retHTML .= "\"".$MyURL."\"";  
                 $retHTML .= q{?action=burn>  
457          };          };
458    
459          $retHTML .= <<'EOF3';          $retHTML .= <<'EOF3';
460  <style>  <style type="text/css">
461  <!--  <!--
462    DIV#fixedBox {
 div#fixedBox {  
463          position: absolute;          position: absolute;
464          bottom: 1em;          top: 50em;
465          left: 0.5em;          left: -24%;
466          padding: 0.5em;          padding: 0.5em;
467          width: 10em;          width: 20%;
468          background: #e0f0e0;          background-color: #E0F0E0;
469          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. */  
470  }  }
471    
472  #mContainer {  DIV#fixedBox, DIV#fixedBox INPUT, DIV#fixedBox TEXTAREA {
473          position: relative;          font-size: 10pt;
474    }
475    
476    FORM>DIV#fixedBox {
477            position: fixed !important;
478            left: 0.5em !important;
479            top: auto !important;
480            bottom: 1em !important;
481            width: 15% !important;
482    }
483    
484    DIV#fixedBox INPUT[type=text], DIV#fixedBox TEXTAREA {
485            border: 1px solid #00C000;
486    }
487    
488    DIV#fixedBox #note {
489            display: block;
490          width: 100%;          width: 100%;
         height: 1.1em;  
         padding: 0px;  
         border: 1px solid #000000;  
491  }  }
492    
493  #gradient {  DIV#fixedBox #submitBurner {
494          position: absolute;          display: block;
         top: 0px;  
         left: 0px;  
495          width: 100%;          width: 100%;
496            margin-top: 0.5em;
497            cursor: pointer;
498    }
499    
500    * HTML {
501            overflow-y: hidden;
502    }
503    
504    * HTML BODY {
505            overflow-y: auto;
506          height: 100%;          height: 100%;
507          display: block;          font-size: 100%;
         background-color: #ffff00;  
508  }  }
509    
510  #mask {  * HTML DIV#fixedBox {
511          position: absolute;          position: absolute;
512          top: 0px;  }
513          left: 0px;  
514    #mContainer, #gradient, #mask, #progressIndicator {
515            display: block;
516          width: 100%;          width: 100%;
517          height: 100%;          font-size: 10pt;
518            font-weight: bold;
519            text-align: center;
520            vertical-align: middle;
521            padding: 1px;
522    }
523    
524    #gradient, #mask, #progressIndicator {
525            left: 0;
526            border-width: 1px;
527            border-style: solid;
528            border-color: #000000;
529            color: #404040;
530            margin: 0.4em;
531            position: absolute;
532            margin-left: -1px;
533            margin-top: -1px;
534            margin-bottom: -1px;
535            overflow: hidden;
536    }
537    
538    #mContainer {
539          display: block;          display: block;
540          font-size: 1px;          position: relative;
541            padding: 0px;
542            margin-top: 0.4em;
543            margin-bottom: 0.5em;
544    }
545    
546    #gradient {
547            z-index: 1;
548            background-color: #FFFF00;
549    }
550    
551    #mask {
552            z-index: 2;
553          background-color: #FFFFFF;          background-color: #FFFFFF;
         overflow: hidden;  
554  }  }
555    
556  #progressIndicator {  #progressIndicator {
557          position: absolute;          z-index: 3;
558          top: 0px;          background-color: transparent;
559          left: 0px;  }
560    
561    #parts {
562            padding: 0.4em;
563            display: none;
564          width: 100%;          width: 100%;
565          height: 100%;          font-size: 80%;
566          display: block;          color: #ff0000;
         font-weight: bold;  
         color: #404040;  
         font-size: 10pt;  
567          text-align: center;          text-align: center;
568  }  }
   
569  -->  -->
570  </style>  </style>
571  <script language="javascript" type="text/javascript">  <script type="text/javascript">
572  <!--  <!--
573    
574  var debug_div = null;  var debug_div = null;
575  var media_size = 4400 * 1024;  EOF3
576    
577            # take maximum archive size from configuration
578            $retHTML .= 'var media_size = '. $Conf{MaxArchiveSize} .';';
579    
580            $retHTML .= <<'EOF3';
581    
582  function debug(msg) {  function debug(msg) {
583  //      return; // Disable debugging          return; // Disable debugging
584    
585          if (! debug_div) debug_div = document.getElementById('debug');          if (! debug_div) debug_div = document.getElementById('debug');
586    
# Line 460  function element_id(name,element) { Line 607  function element_id(name,element) {
607  }  }
608    
609  function checkAll(location) {  function checkAll(location) {
610          var len = element_id('forma').elements.length;          var f = element_id('forma') || null;
611            if (!f) return false;
612    
613            var len = f.elements.length;
614          var check_all = element_id('allFiles');          var check_all = element_id('allFiles');
615            var suma = check_all.checked ? (parseInt(f.elements['totalsize'].value) || 0) : 0;
616    
617          for (var i = 0; i < len; i++) {          for (var i = 0; i < len; i++) {
618                    var e = f.elements[i];
619                  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') {  
620                          if (check_all.checked) {                          if (check_all.checked) {
621                                  e.checked = true;                                  if (e.checked) continue;
622                                    var el = element_id("fss" + e.name.substr(3));
623                                    var size = parseInt(el.value) || 0;
624                                    debug('suma: '+suma+' size: '+size);
625                                    if ((suma + size) < media_size) {
626                                            suma += size;
627                                            e.checked = true;
628                                    } else {
629                                            break;
630                                    }
631                          } else {                          } else {
632                                  e.checked = false;                                  e.checked = false;
633                          }                          }
634                  }                  }
635          }          }
636            update_sum(suma);
637    }
638    
639          sumiraj();  function update_sum(suma, suma_disp) {
640            if (! suma_disp) suma_disp = suma;
641            element_id('forma').elements['totalsize'].value = suma_disp;
642            pbar_set(suma, media_size);
643            debug('total size: ' + suma);
644  }  }
645        
646  function sumiraj(e) {  function sumiraj(e) {
647          var suma = parseInt(element_id('forma').totalsize.value) || 0;          var suma = parseInt(element_id('forma').elements['totalsize'].value) || 0;
648          var len = element_id('forma').elements.length;          var len = element_id('forma').elements.length;
649          if (e) {          if (e) {
650                  var size = parseInt( element_id("fss" + e.name.substr(3)).value );                  var size = parseInt( element_id("fss" + e.name.substr(3)).value);
651                  if (e.checked) {                  if (e.checked) {
652                          suma += size;                          suma += size;
653                  } else {                  } else {
654                          suma -= size;                          suma -= size;
655                  }                  }
656    
657                    var parts = parseInt( element_id("prt" + e.name.substr(3)).value);
658                    if (suma > media_size && suma == size && parts > 1) {
659                            element_id("parts").innerHTML = "This will take "+parts+" mediums!";
660                            element_id("parts").style.display = 'block';
661                            update_sum(media_size, suma);
662                            suma = media_size;
663                            return suma;
664                    } else {
665                            element_id("parts").style.display = 'none';
666                    }
667    
668                    if (suma < 0) suma = 0;
669          } else {          } else {
670                  suma = 0;                  suma = 0;
671                  for (var i = 0; i < len; i++) {                  for (var i = 0; i < len; i++) {
# Line 498  function sumiraj(e) { Line 676  function sumiraj(e) {
676                          }                          }
677                  }                  }
678          }          }
679          element_id('forma').totalsize.value = suma;          update_sum(suma);
         pbar_set(suma, media_size);  
         debug('total size: '+suma);  
680          return suma;          return suma;
681  }  }
682    
683  /* progress bar */  /* progress bar */
684    
685  var _pbar_width = 0;  var _pbar_width = null;
686  var _pbar_warn = 10;    // change color in last 10%  var _pbar_warn = 10;    // change color in last 10%
687    
688  function pbar_reset() {  function pbar_reset() {
689          element_id("mask").style.left = "0px";          element_id("mask").style.left = "0px";
690          _pbar_width = element_id("mContainer").offsetWidth - 2;          _pbar_width = element_id("mContainer").offsetWidth - 2;
691          element_id("mask").style.width = _pbar_width + "px";          element_id("mask").style.width = _pbar_width + "px";
         element_id("progressIndicator").style.zIndex  = 10;  
692          element_id("mask").style.display = "block";          element_id("mask").style.display = "block";
693            element_id("progressIndicator").style.zIndex  = 10;
694          element_id("progressIndicator").innerHTML = "0";          element_id("progressIndicator").innerHTML = "0";
695  }  }
696    
697  function dec2hex(d) {  function dec2hex(d) {
698          var hch="0123456789ABCDEF";          var hch = '0123456789ABCDEF';
699          var a=d%16;          var a = d % 16;
700          var q=(d-a)/16;          var q = (d - a) / 16;
701          return hch.charAt(q)+hch.charAt(a);          return hch.charAt(q) + hch.charAt(a);
702  }  }
703    
   
704  function pbar_set(amount, max) {  function pbar_set(amount, max) {
705            debug('pbar_set('+amount+', '+max+')');
706    
707          debug('pbar_set( '+amount+' , '+max+' )');          if (_pbar_width == null) {
708                    var _mc = element_id("mContainer");
709          curWidth = parseInt(element_id("mask").offsetWidth);                  if (_pbar_width == null) _pbar_width = parseInt(_mc.offsetWidth ? (_mc.offsetWidth - 2) : 0) || null;
710          curLeft = parseInt(element_id("mask").offsetLeft);                  if (_pbar_width == null) _pbar_width = parseInt(_mc.clientWidth ? (_mc.clientWidth + 2) : 0) || null;
711                    if (_pbar_width == null) _pbar_width = 0;
712            }
713    
714          var pcnt = Math.floor( amount * 100 / max );          var pcnt = Math.floor(amount * 100 / max);
715          var p90 = 100 - _pbar_warn;          var p90 = 100 - _pbar_warn;
716          var pcol = pcnt - p90;          var pcol = pcnt - p90;
717          if (pcol < _pbar_warn) {          if (Math.round(pcnt) <= 100) {
718                  if (pcol < 0) pcol = 0;                  if (pcol < 0) pcol = 0;
719                  var e = element_id("submitBurner");                  var e = element_id("submitBurner");
720                  if (e && e.disabled) {                  debug('enable_button');
721                          debug('enable_button');                  e.disabled = false;
722                          var a = e.getAttributeNode('disabled') || null;                  var a = e.getAttributeNode('disabled') || null;
723                          if (a) e.removeAttributeNode(a);                  if (a) e.removeAttributeNode(a);
724                  }          } else {
         } else if (pcol > _pbar_warn) {  
725                  debug('disable button');                  debug('disable button');
726                  pcol = _pbar_warn;                  pcol = _pbar_warn;
727                  var e = element_id("submitBurner");                  var e = element_id("submitBurner");
728                  if (! e.disabled) e.disabled = true;                  if (!e.disabled) e.disabled = true;
729          }          }
730          var col_g = Math.floor( ( _pbar_warn - pcol ) * 255 / _pbar_warn );          var col_g = Math.floor((_pbar_warn - pcol) * 255 / _pbar_warn);
731          var col = '#ff' + dec2hex( col_g ) + '00';          var col = '#FF' + dec2hex(col_g) + '00';
732    
733          //debug('pcol: '+pcol+' g:'+col_g+' _pbar_warn:'+ _pbar_warn + ' color: '+col);          //debug('pcol: '+pcol+' g:'+col_g+' _pbar_warn:'+ _pbar_warn + ' color: '+col);
734          element_id("gradient").style.backgroundColor = col;          element_id("gradient").style.backgroundColor = col;
735    
         var size = parseInt( _pbar_width * amount / max );  
   
         curWidth = _pbar_width - size;  
         curLeft = size ;  
   
         //debug('size: '+size+' curWidth '+curWidth+' curLeft: '+curLeft);  
   
736          element_id("progressIndicator").innerHTML = pcnt + '%';          element_id("progressIndicator").innerHTML = pcnt + '%';
737          //element_id("progressIndicator").innerHTML = amount;          //element_id("progressIndicator").innerHTML = amount;
738    
739          if (curLeft > _pbar_width) {          element_id("mask").style.clip = 'rect(' + Array(
740                  element_id("mask").style.display = "none";                  '0px',
741                  return;                  element_id("mask").offsetWidth + 'px',
742          } else {                  element_id("mask").offsetHeight + 'px',
743                  element_id("mask").style.display = "";                  Math.round(_pbar_width * amount / max) + 'px'
744          }          ).join(' ') + ')';
   
         //if(parseInt(element_id("mask").offsetWidth)>10)  
         element_id("mask").style.width = curWidth + "px";  
         element_id("mask").style.left = curLeft + "px";  
   
745  }  }
746    
747  if (!self.body) self.body = new Object();  if (!self.body) self.body = new Object();
748  self.onload = self.document.onload = self.body.onload = function() {  self.onload = self.document.onload = self.body.onload = function() {
749          pbar_reset();          //pbar_reset();
750          sumiraj();          sumiraj();
751  }  };
752    
753  //-->  // -->
754  </script>  </script>
755  <div id="fixedBox">  <div id="fixedBox">
756    
757  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>  
758    
759  <div id="mContainer">  <div id="mContainer">
760          <div id="gradient"></div>          <div id="gradient">&nbsp;</div>
761          <div id="mask"></div>          <div id="mask">&nbsp;</div>
762          <div id="progressIndicator">&nbsp;</div>          <div id="progressIndicator">0%</div>
763  </div>  </div>
   
764  <br/>  <br/>
765    
766    <div id="parts">&nbsp;</div>
767    
768  Note:  Note:
769  <br/>  <textarea name="note" cols="10" rows="5" id="note"></textarea>
770  <textarea name="note" cols="10" rows="5">  
771  </textarea>  <input type="submit" id="submitBurner" value="Burn selected" name="submitBurner" />
 <br/>  
 <input type="submit" id="submitBurner" value="Burn selected" name="submitBurner">  
772    
773  </div>  </div>
774    <!--
775  <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;">
776  no debug output yet  no debug output yet
777  </div>  </div>
778    -->
779  EOF3  EOF3
780          $retHTML .= q{          $retHTML .= q{
781                          <input type="hidden" value="burn" name="action">                          <input type="hidden" value="burn" name="action">
# Line 626  EOF3 Line 791  EOF3
791                          <td align="center">date</td>                          <td align="center">date</td>
792                          <td align="center">age/days</td>                          <td align="center">age/days</td>
793                          <td align="center">size/MB</td>                          <td align="center">size/MB</td>
794                          <td align="center">gzip size</td>                          <td align="center">gzip size/kB</td>
795                          </tr>                          </tr>
796    
797          };          };
# Line 644  EOF3 Line 809  EOF3
809                  }                  }
810                  my $ftype = "";                  my $ftype = "";
811    
812                    my $checkbox_key = $backup->{'hostid'}. '_' .$backup->{'backupnum'} . '_' . $backup->{'id'};
813    
814                  $retHTML .=                  $retHTML .=
815                          '<tr' . $color[$i %2 ] . '>                          '<tr' . $color[$i %2 ] . '>
816                          <td class="fview">';                          <td class="fview">';
817                  # FIXME  
818                  $backup->{'fs_size'} = int($backup->{'size'} * 1024);                  if (($backup->{'inc_size'} || 0) > 0) {
                 if (($backup->{'fs_size'} || 0) > 0) {  
819                          $retHTML .= '                          $retHTML .= '
820                          <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);">';  
821                  }                  }
822    
823                  $retHTML .=                  $retHTML .=
824                          '</td>' .                          '</td>' .
825                          '<td align="right">' . $backup->{'host'} . ':' . $backup->{'share'} . '</td>' .                          '<td align="right">' . $backup->{'host'} . ':' . $backup->{'share'} . '</td>' .
# Line 664  EOF3 Line 828  EOF3
828                          '<td align="center">' . epoch_to_iso( $backup->{'date'} ) . '</td>' .                          '<td align="center">' . epoch_to_iso( $backup->{'date'} ) . '</td>' .
829                          '<td align="center">' . $backup->{'age'} . '</td>' .                          '<td align="center">' . $backup->{'age'} . '</td>' .
830                          '<td align="right">' . $backup->{'size'} . '</td>' .                          '<td align="right">' . $backup->{'size'} . '</td>' .
831                          '<td align="right">' . $backup->{'fs_size'} .                          '<td align="right">' . $backup->{'inc_size'} .
832                          '<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>' .
833                            '<input type="hidden" id="prt'.$checkbox_key .'" value="'. $backup->{'parts'} .'"></td>' .
834    
835                          "</tr>\n";                          "</tr>\n";
836          }          }
# Line 717  sub displayGrid($) { Line 882  sub displayGrid($) {
882          <table style="fview" width="100%" border="0" cellpadding="2" cellspacing="0">          <table style="fview" width="100%" border="0" cellpadding="2" cellspacing="0">
883                  <tr class="fviewheader">                  <tr class="fviewheader">
884                  <td></td>                  <td></td>
885                  <td align="center">Share</td>          };
886                  <td align="center">Type and Name</td>  
887                  <td align="center">#</td>          my ($sort_what, $sort_dir) = split(/_/,$param->{'sort'},2);
888                  <td align="center">Size</td>  
889                  <td align="center">Date</td>          sub sort_header($$$) {
890                    my ($param, $display, $name) = @_;
891    
892                    my $html = '<td align="center"';
893                    if (lc($sort_what) eq lc($name)) {
894                            my $dir = lc($sort_dir);
895                            $dir =~ tr/ad/da/;
896                            $param->{'sort'} = $name . '_' . $dir;
897                            $html .= ' style="border: 1px solid #808080;"';
898                    } else {
899                            $param->{'sort'} = $name . '_a';
900                    }
901                    $html .= '<a href="' . page_uri($param) . '">' . $display . '</a></td>';
902                    return $html;
903            }
904    
905            $retHTML .=
906                    sort_header($param, 'Share', 'share') .
907                    sort_header($param, 'Type and Name', 'path') .
908                    sort_header($param, '#', 'num') .
909                    sort_header($param, 'Size', 'size') .
910                    sort_header($param, 'Date', 'date');
911    
912            $retHTML .= qq{
913                  <td align="center">Media</td>                  <td align="center">Media</td>
914                  </tr>                  </tr>
915          };          };
# Line 741  sub displayGrid($) { Line 929  sub displayGrid($) {
929                  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, @_);
930          }          }
931    
932            my $sth_archived;
933            my %archived_cache;
934    
935            sub check_archived($$$) {
936                    my ($host, $share, $num) = @_;
937    
938                    if (my $html = $archived_cache{"$host $share $num"}) {
939                            return $html;
940                    }
941    
942                    $sth_archived ||= $dbh->prepare(qq{
943                            select
944                                    dvd_nr, note,
945                                    count(archive_burned.copy) as copies
946                            from archive
947                            inner join archive_burned on archive_burned.archive_id = archive.id
948                            inner join archive_backup on archive.id = archive_backup.archive_id
949                            inner join backups on backups.id = archive_backup.backup_id
950                            inner join hosts on hosts.id = backups.hostid
951                            inner join shares on shares.id = backups.shareid
952                            where hosts.name = ? and shares.name = ? and backups.num = ?
953                            group by dvd_nr, note
954                    });
955    
956                    my @mediums;
957    
958                    $sth_archived->execute($host, $share, $num);
959                    while (my $row = $sth_archived->fetchrow_hashref()) {
960                            push @mediums, '<abbr title="' .
961                                    $row->{'note'} .
962                                    ' [' . $row->{'copies'} . ']' .
963                                    '">' .$row->{'dvd_nr'} .
964                                    '</abbr>';
965                    }
966    
967                    my $html = join(", ",@mediums);
968                    $archived_cache{"$host $share $num"} = $html;
969                    return $html;
970            }
971    
972          my $i = $offset * $on_page;          my $i = $offset * $on_page;
973    
974          foreach $file (@{ $files }) {          foreach $file (@{ $files }) {
# Line 757  sub displayGrid($) { Line 985  sub displayGrid($) {
985                          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>} .
986                          qq{<td class="fviewborder" align="right">} . $file->{'size'} . qq{</td>} .                          qq{<td class="fviewborder" align="right">} . $file->{'size'} . qq{</td>} .
987                          qq{<td class="fviewborder">} . epoch_to_iso( $file->{'date'} ) . qq{</td>} .                          qq{<td class="fviewborder">} . epoch_to_iso( $file->{'date'} ) . qq{</td>} .
988                          qq{<td class="fviewborder">} . '?' . qq{</td>};                          qq{<td class="fviewborder">} . check_archived( $file->{'hname'}, $file->{'sname'}, $file->{'backupnum'} ) . qq{</td>};
989    
990                  $retHTML .= "</tr>";                  $retHTML .= "</tr>";
991          }          }
# Line 772  sub displayGrid($) { Line 1000  sub displayGrid($) {
1000          my $max_page = int( $results / $on_page );          my $max_page = int( $results / $on_page );
1001          my $page = 0;          my $page = 0;
1002    
1003          sub page_link($$$) {          sub page_uri($) {
1004                  my ($param,$page,$display) = @_;                  my $param = shift || die "no param?";
   
                 $param->{'offset'} = $page;  
1005    
1006                  my $html = '<a href = "' . $MyURL;                  my $uri = $MyURL;
1007                  my $del = '?';                  my $del = '?';
1008                  foreach my $k (keys %{ $param }) {                  foreach my $k (keys %{ $param }) {
1009                          if ($param->{$k}) {                          if ($param->{$k}) {
1010                                  $html .= $del . $k . '=' . ${EscURI( $param->{$k} )};                                  $uri .= $del . $k . '=' . ${EscURI( $param->{$k} )};
1011                                  $del = '&';                                  $del = '&';
1012                          }                          }
1013                  }                  }
1014                  $html .= '">' . $display . '</a>';                  return $uri;
1015            }
1016    
1017            sub page_link($$$) {
1018                    my ($param,$page,$display) = @_;
1019    
1020                    $param->{'offset'} = $page if (defined($page));
1021    
1022                    my $html = '<a href = "' . page_uri($param) . '">' . $display . '</a>';
1023          }          }
1024    
1025          $retHTML .= '<div style="text-align: center;">';          $retHTML .= '<div style="text-align: center;">';

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

  ViewVC Help
Powered by ViewVC 1.1.26