home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / usr / lib / YaST2 / servers_non_y2 / ag_cron < prev    next >
Text File  |  2006-11-29  |  3KB  |  136 lines

  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4.  
  5. package ag_cron;
  6. use ycp;
  7. use YaST::SCRAgent;
  8. use Config::Crontab;
  9. use diagnostics;
  10. #use Data::Dumper;
  11.  
  12. use POSIX qw(tmpnam);
  13.  
  14. our @ISA = ("YaST::SCRAgent");
  15.  
  16. y2milestone ("ag_cron started");
  17.  
  18. sub Write()
  19. {
  20.     my $class = shift;
  21.     my ($path, $file, $options) = @_;
  22.  
  23.     my $ct = new Config::Crontab;
  24.  
  25.     my $result = 1;
  26.  
  27.     foreach my $b (@{$options}) {
  28.  
  29.         my $block = new Config::Crontab::Block;
  30.  
  31.         my @comments = @{$b->{'comments'}};
  32.  
  33.         foreach my $comment (@comments) {
  34.             $block->last( new Config::Crontab::Comment( -data => $comment ) );
  35.             $ct->last($block);
  36.         }
  37.  
  38.  
  39.         my $hash_ref = $b->{'envs'};
  40.         if (defined $hash_ref) {
  41.             while((my $key, my $value) = each( %$hash_ref ) ) {
  42.                 $block->last( new Config::Crontab::Env( -name => $key, -value => $value ) );
  43.                 $ct->last($block);
  44.             }
  45.         }
  46.  
  47.         my @events = @{$b->{'events'}};
  48.         foreach my $event(@events) {
  49.             $block->last( new Config::Crontab::Event( 
  50.                         -minute  => $event->{'minute'},
  51.                         -hour    => $event->{'hour'},
  52.                         -special    => $event->{'special'},
  53.                         -command => $event->{'command'} ) );
  54.             $ct->last($block);
  55.  
  56.         }
  57.     }
  58.  
  59.     $ct->write($file);
  60.  
  61.     return $result;
  62.  
  63. }
  64.  
  65. sub Read ()
  66. {
  67.     my $class = shift;
  68.     my ($path, $file, $options) = @_;
  69.  
  70.     my $ct = new Config::Crontab;
  71.     $ct->read( -file => $file );
  72.  
  73.  
  74.  
  75.     my (@blocks);
  76.     for my $block ( $ct->blocks ) {
  77.  
  78.         my (@ycpcomments, @ycpevents);
  79.         my ( $ycpenv, $ycpblock );
  80.  
  81.         my @comments = $block->select( -type   => 'comment' );
  82.         foreach my $comment (@comments) {
  83.             push(@ycpcomments, $comment->data);
  84.         }
  85.  
  86.         my @envs = $block->select( -type   => 'env' );
  87.         foreach my $env (@envs) {
  88.             $ycpenv->{$env->name} = $env->value;
  89.         }
  90.  
  91.  
  92.         my @events = $block->select( -type   => 'event' );
  93.         foreach my $event (@events) {
  94.             my $ycpevent;
  95.             $ycpevent->{"hour"} = $event->hour;
  96.             $ycpevent->{"minute"} = $event->minute;
  97.             $ycpevent->{"dom"} = $event->dom;
  98.             $ycpevent->{"month"} = $event->month;
  99.             $ycpevent->{"dow"} = $event->dow;
  100.             $ycpevent->{"special"} = $event->special;
  101.             $ycpevent->{"data"} = $event->data;
  102.             $ycpevent->{"datetime"} = $event->datetime;
  103.             $ycpevent->{"command"} = $event->command;
  104.             $ycpevent->{"active"} = $event->active;
  105.             push(@ycpevents, $ycpevent );
  106.         }
  107.         if (defined \@ycpcomments) {
  108.             $ycpblock->{"comments"} = \@ycpcomments; 
  109.         }
  110.         if (defined $ycpenv ) {
  111.             $ycpblock->{"envs"} = $ycpenv; 
  112.         }
  113.         if (defined \@ycpevents) {
  114.             $ycpblock->{"events"} = \@ycpevents; 
  115.         }
  116.  
  117.         push(@blocks, $ycpblock );
  118.  
  119.     }
  120.  
  121.  
  122.     return \@blocks;
  123.     
  124. }
  125.  
  126.  
  127.  
  128.  
  129. package main;
  130.  
  131. ag_cron->Run ();
  132.  
  133.  
  134.  
  135. #EOF
  136.