diff options
| author | Andreas Brachold <vdr07@deltab.de> | 2007-12-20 13:10:06 +0000 |
|---|---|---|
| committer | Andreas Brachold <vdr07@deltab.de> | 2007-12-20 13:10:06 +0000 |
| commit | 4c79c794a2f843d801604a02262e83506baa1120 (patch) | |
| tree | e8ee416aede78d53c59131ab5a110f1ae8e012b5 /lib | |
| parent | f608b06dfa841be89942d914d8d80b936b65316d (diff) | |
| download | xxv-4c79c794a2f843d801604a02262e83506baa1120.tar.gz xxv-4c79c794a2f843d801604a02262e83506baa1120.tar.bz2 | |
* NEWS: Show category on message
* NEWS: Select category name inseed integer value
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/XXV/MODULES/EVENTS.pm | 4 | ||||
| -rw-r--r-- | lib/XXV/MODULES/RECORDS.pm | 1 | ||||
| -rw-r--r-- | lib/XXV/MODULES/REPORT.pm | 51 | ||||
| -rw-r--r-- | lib/XXV/MODULES/SHARE.pm | 11 | ||||
| -rw-r--r-- | lib/XXV/MODULES/TIMERS.pm | 7 | ||||
| -rw-r--r-- | lib/XXV/OUTPUT/NEWS/JABBER.pm | 32 | ||||
| -rw-r--r-- | lib/XXV/OUTPUT/NEWS/MAIL.pm | 33 | ||||
| -rw-r--r-- | lib/XXV/OUTPUT/NEWS/RSS.pm | 92 | ||||
| -rw-r--r-- | lib/XXV/OUTPUT/NEWS/VDR.pm | 55 |
9 files changed, 202 insertions, 84 deletions
diff --git a/lib/XXV/MODULES/EVENTS.pm b/lib/XXV/MODULES/EVENTS.pm index 47f75f1..7172e7e 100644 --- a/lib/XXV/MODULES/EVENTS.pm +++ b/lib/XXV/MODULES/EVENTS.pm @@ -3,8 +3,7 @@ use strict; use Tools; use Locale::gettext; -use File::Basename; -use File::Find; + # This module method must exist for XXV # ------------------ @@ -14,7 +13,6 @@ sub module { my $args = { Name => 'EVENTS', Prereq => { - 'Data::Dumper' => 'stringified perl data structures, suitable for both printing and eval', 'Date::Manip' => 'date manipulation routines', }, Description => gettext( diff --git a/lib/XXV/MODULES/RECORDS.pm b/lib/XXV/MODULES/RECORDS.pm index eb73778..416a093 100644 --- a/lib/XXV/MODULES/RECORDS.pm +++ b/lib/XXV/MODULES/RECORDS.pm @@ -178,7 +178,6 @@ sub module { # "Msg=>text" = logmessage =~ /text/ # "Mod=>text" = modname =~ /text/ SearchForEvent => { - Sub => 'RECORDS', Msg => 'delr', }, # Search for a Match and extract the information diff --git a/lib/XXV/MODULES/REPORT.pm b/lib/XXV/MODULES/REPORT.pm index a1ac3b1..c9797d9 100644 --- a/lib/XXV/MODULES/REPORT.pm +++ b/lib/XXV/MODULES/REPORT.pm @@ -28,6 +28,16 @@ sub module { default => 'y', type => 'confirm', required => gettext('This is required!'), + check => sub { + my $value = shift; + if($value eq 'y') { + my $module = main::getModule('EVENTS'); + if(!$module or $module->{active} ne 'y') { + return undef, sprintf(gettext("Modul can't activated! This modul depends modul %s."),'EVENTS'); + } + } + return $value; + }, }, interval => { description => gettext('Time in hours to send the report.'), @@ -105,17 +115,17 @@ sub new { my $erg = $self->init or return error('Problem to initialize modul!'); # Initiat after load modules ... - main::after(sub{ + main::after( sub{ my $start = main::getStartTime; $self->news( - sprintf(gettext('Restart the xxv system at: %s!'), datum($start)), + sprintf(gettext('XXVD System %s started'), main::getVersion), + sprintf(gettext('Start time: %s'), datum($start)), undef, undef, - undef, - 'important', + 'important' ); return 1; - }, "Send restart message to news modules ..."); + }, "Send start message to news modules ..."); return $self; } @@ -217,6 +227,7 @@ sub news { Url => $url, Level => $lev, LevelName => $levname, + category => $obj->translate_level($levname) }; # Send to all activated News modules @@ -270,11 +281,13 @@ sub scala { my $typ = shift || return 10; $obj->{SCALA} = { + 'all' => 1, 'harmless' => 10, 'interesting' => 30, 'veryinteresting'=> 50, 'important' => 70, 'veryimportant' => 100, + 'none' => 200, } unless(exists $obj->{SCALA}); if($typ and exists $obj->{SCALA}->{$typ}) { @@ -284,5 +297,33 @@ sub scala { } } +# ------------------ +sub get_level_as_array { +# ------------------ + my $obj = shift || return error('No object defined!'); + + return [ + [ 1, gettext('All messages') ], # Include all messages, dont use as category + [ 10, gettext('Harmless') ], + [ 30, gettext('Interesting') ], + [ 50, gettext('Very interesting') ], + [ 70, gettext('Important') ], + [ 100, gettext('Very important') ], + [ 200, gettext('None messages') ] # Exclude all messages, dont use as category + ]; +} + +sub translate_level { + my $obj = shift || return error('No object defined!'); + my $level = shift || 'harmless'; + + my $s = $obj->scala($level); + + my $erg = $obj->get_level_as_array(); + foreach my $w ( @$erg ) { + return $w->[1] if($s <= $w->[0]); + } + return gettext('Harmless'); +} 1; diff --git a/lib/XXV/MODULES/SHARE.pm b/lib/XXV/MODULES/SHARE.pm index f37d777..62466cb 100644 --- a/lib/XXV/MODULES/SHARE.pm +++ b/lib/XXV/MODULES/SHARE.pm @@ -51,6 +51,17 @@ sub module { default => 'n', type => 'confirm', required => gettext('This is required!'), + check => sub { + my $value = shift; + if($value eq 'y') { + my $module = main::getModule('EVENTS'); + unless($module or $module->{active} eq 'y') { + return undef, sprintf(gettext("Modul can't activated! This modul depends modul %s."),'EVENTS'); + } + } + return $value; + }, + }, rating => { description => gettext('URL to access popularity web service.'), diff --git a/lib/XXV/MODULES/TIMERS.pm b/lib/XXV/MODULES/TIMERS.pm index bd663b9..38acde4 100644 --- a/lib/XXV/MODULES/TIMERS.pm +++ b/lib/XXV/MODULES/TIMERS.pm @@ -137,7 +137,6 @@ sub module { # "Msg=>text" = logmessage =~ /text/ # "Mod=>text" = modname =~ /text/ SearchForEvent => { - Mod => 'TIMERS', Msg => 'New timer', }, # Search for a Match and extract the information @@ -191,7 +190,6 @@ sub module { Descr => gettext('Create event entries if the user has deleted a timer.'), Level => 'interesting', SearchForEvent => { - Mod => 'TIMERS', Msg => 'delt', }, Match => { @@ -235,19 +233,18 @@ sub module { Descr => gettext('Create event entries if the user has toggled a timer.'), Level => 'interesting', SearchForEvent => { - Mod => 'TIMERS', Msg => 'modt', }, Match => { TimerId => qr/modt\s+(\d+)\s(on|off)/s, - #Type => qr/modt\s+\d+\s+(on|off)/s, + Type => qr/modt\s+\d+\s+(on|off)/s }, Actions => [ q|sub{ my $args = shift; my $event = shift; my $timer = getDataById($args->{TimerId}, 'TIMERS', 'Id'); my $title; - if($timer->{Status} & 1) { + if($args->{Type} eq 'on') { $title = sprintf(gettext("Timer activated: %s"),$timer->{File}); } else { $title = sprintf(gettext("Timer deactivated: %s"),$timer->{File}); diff --git a/lib/XXV/OUTPUT/NEWS/JABBER.pm b/lib/XXV/OUTPUT/NEWS/JABBER.pm index c343cac..ba424b3 100644 --- a/lib/XXV/OUTPUT/NEWS/JABBER.pm +++ b/lib/XXV/OUTPUT/NEWS/JABBER.pm @@ -71,20 +71,37 @@ Then you must receive a message in your running jabber client. check => sub { my $value = shift; my $erg = $obj->init - or return error('Problem to initialize news module') + or return undef, gettext("Can't initialize news modul!") if($value eq 'y' and not exists $obj->{JCON}); + if($value eq 'y') { + my $emodule = main::getModule('EVENTS'); + if(!$emodule or $emodule->{active} ne 'y') { + return undef, sprintf(gettext("Modul can't activated! This modul depends modul %s."),'EVENTS'); + } + my $rmodule = main::getModule('REPORT'); + if(!$rmodule or $rmodule->{active} ne 'y') { + return undef, sprintf(gettext("Modul can't activated! This modul depends modul %s."),'REPORT'); + } + } return $value; }, }, level => { - description => gettext('Minimum level of messages which can be displayed (1 ... 100)'), + description => gettext('Category of messages that should displayed'), default => 1, - type => 'integer', + type => 'list', + choices => sub { + my $rmodule = main::getModule('REPORT'); + return undef unless($rmodule); + my $erg = $rmodule->get_level_as_array(); + map { my $x = $_->[1]; $_->[1] = $_->[0]; $_->[0] = $x; } @$erg; + return @$erg; + }, required => gettext('This is required!'), check => sub { my $value = int(shift) || 0; unless($value >= 1 and $value <= 100) { - return undef, 'Sorry, but the value must be between 1 and 100'; + return undef, sprintf(gettext('Sorry, but value must be between %d and %d'),1,100); } return $value; }, @@ -157,8 +174,8 @@ sub new { main::after(sub{ # The Initprocess my $erg = $self->init - or return error('Problem to initialize news modul!'); - }, "NEWS::JABBER: Start initiate the jabber modul ...") + or return error("Can't initialize news modul!"); + }, "NEWS::JABBER: Start initiate news modul ...") if($self->{active} eq 'y'); return $self; @@ -168,7 +185,6 @@ sub new { sub init { # ------------------ my $obj = shift || return error('No object defined!'); - my $url = sprintf("http://%s:%s/", $obj->{host}, main::getModule('HTTPD')->{Port}); 1; } @@ -180,7 +196,7 @@ sub jconnect { my $jcon = Net::XMPP::Client->new( debuglevel => 0, - ) || return error('Problem to create an Jabber Client'); + ) || return error("Can't create jabber client"); my ($user, $server) = split('\@', $obj->{user}); diff --git a/lib/XXV/OUTPUT/NEWS/MAIL.pm b/lib/XXV/OUTPUT/NEWS/MAIL.pm index d92cd3b..0fbeca2 100644 --- a/lib/XXV/OUTPUT/NEWS/MAIL.pm +++ b/lib/XXV/OUTPUT/NEWS/MAIL.pm @@ -35,20 +35,37 @@ sub module { check => sub { my $value = shift; my $erg = $obj->init - or return error('Problem to initialize news module') + or return undef, gettext("Can't initialize news modul!") if($value eq 'y' and not exists $obj->{INITE}); return $value; + if($value eq 'y') { + my $emodule = main::getModule('EVENTS'); + if(!$emodule or $emodule->{active} ne 'y') { + return undef, sprintf(gettext("Modul can't activated! This modul depends modul %s."),'EVENTS'); + } + my $rmodule = main::getModule('REPORT'); + if(!$rmodule or $rmodule->{active} ne 'y') { + return undef, sprintf(gettext("Modul can't activated! This modul depends modul %s."),'REPORT'); + } + } }, }, level => { - description => gettext('Minimum level of messages which can be displayed (1 ... 100)'), + description => gettext('Category of messages that should displayed'), default => 1, - type => 'integer', + type => 'list', + choices => sub { + my $rmodule = main::getModule('REPORT'); + return undef unless($rmodule); + my $erg = $rmodule->get_level_as_array(); + map { my $x = $_->[1]; $_->[1] = $_->[0]; $_->[0] = $x; } @$erg; + return @$erg; + }, required => gettext('This is required!'), check => sub { my $value = int(shift) || 0; unless($value >= 1 and $value <= 100) { - return undef, 'Sorry, but the value must be between 1 and 100'; + return undef, sprintf(gettext('Sorry, but value must be between %d and %d'),1,100); } return $value; }, @@ -75,7 +92,7 @@ sub module { }, from_address => { description => gettext('Mail address to describe the sender.'), - default => 'xxv@vdr.de', + default => 'xxv@example.com', type => 'string', }, smtp => { @@ -161,7 +178,7 @@ sub new { # The Initprocess my $erg = $self->init - or return error('Problem to initialize news modul!') + or return error("Can't initialize news modul!") if($self->{active} eq 'y'); $self->{TYP} = 'text/plain'; @@ -218,11 +235,11 @@ sub send { subject => "News from your XXV System!" , msg => $content, msgid => $obj->{COUNT}, - ) || return error sprintf('Problem to send mail: %s', $Mail::SendEasy::ER); + ) || return error sprintf("Can't send mail: %s", $Mail::SendEasy::ER); $obj->{LastReportTime} = time; - lg sprintf('News Mail with nr. %d successfully send at %s', $obj->{COUNT}, scalar localtime); + lg sprintf('Mail %d. send successfully', $obj->{COUNT}); $obj->{NEWSLETTER} = undef; 1; } diff --git a/lib/XXV/OUTPUT/NEWS/RSS.pm b/lib/XXV/OUTPUT/NEWS/RSS.pm index b4d5293..05f2f0d 100644 --- a/lib/XXV/OUTPUT/NEWS/RSS.pm +++ b/lib/XXV/OUTPUT/NEWS/RSS.pm @@ -34,20 +34,37 @@ sub module { check => sub { my $value = shift; my $erg = $obj->init - or return error('Problem to initialize news module') + or return undef, gettext("Can't initialize news modul!") if($value eq 'y' and not exists $obj->{INITE}); + if($value eq 'y') { + my $emodule = main::getModule('EVENTS'); + if(!$emodule or $emodule->{active} ne 'y') { + return undef, sprintf(gettext("Modul can't activated! This modul depends modul %s."),'EVENTS'); + } + my $rmodule = main::getModule('REPORT'); + if(!$rmodule or $rmodule->{active} ne 'y') { + return undef, sprintf(gettext("Modul can't activated! This modul depends modul %s."),'REPORT'); + } + } return $value; }, }, level => { - description => gettext('Minimum level of messages which can be displayed (1 ... 100)'), + description => gettext('Category of messages that should displayed'), default => 1, - type => 'integer', + type => 'list', + choices => sub { + my $rmodule = main::getModule('REPORT'); + return undef unless($rmodule); + my $erg = $rmodule->get_level_as_array(); + map { my $x = $_->[1]; $_->[1] = $_->[0]; $_->[0] = $x; } @$erg; + return @$erg; + }, required => gettext('This is required!'), check => sub { my $value = int(shift) || 0; unless($value >= 1 and $value <= 100) { - return undef, 'Sorry, but the value must be between 1 and 100'; + return undef, sprintf(gettext('Sorry, but value must be between %d and %d'),1,100); } return $value; }, @@ -90,7 +107,7 @@ sub new { main::after(sub{ # The Initprocess my $erg = $self->init - or return error('Problem to initialize news modul!'); + or return error("Can't initialize news modul!"); }, "NEWS::RSS: Start initiate rss feed ...") if($self->{active} eq 'y'); @@ -112,7 +129,7 @@ sub init { sub createRSS { # ------------------ my $obj = shift || return error('No object defined!'); - my $ver = shift || 1; + my $ver = shift || 2; my $account = sprintf("%s@%s", $ENV{USER}, main::getModule('STATUS')->name); my $url = sprintf("http://%s:%s/", $obj->{host}, main::getModule('HTTPD')->{Port}); @@ -120,7 +137,7 @@ sub createRSS { if($ver == 1) { $rss = XML::RSS->new( version => '1.0', - ) || return error('Problem to create an RSS Object'); + ) || return error("Can't create rss 1.0 object"); $rss->channel( @@ -142,24 +159,25 @@ sub createRSS { } elsif($ver == 2) { my $lastbuild = (exists $obj->{lastBuildDate} ? $obj->{lastBuildDate} : time); + my $lastadd = (exists $obj->{lastAddDate} ? $obj->{lastAddDate} : time); $rss = XML::RSS->new( version => '2.0', - ) || return error('Problem to create an RSS Object'); + ) || return error("Can't create rss 2.0 object"); $rss->channel( title => gettext("XXV RSS 2.0"), 'link' => $url, description => gettext("Important messages from your VDR/XXV"), language => setlocale(POSIX::LC_MESSAGES), - pubDate => datum(time, 'rss'), + pubDate => datum($lastadd, 'rss'), lastBuildDate => datum($lastbuild, 'rss'), managingEditor => $account, ); } $obj->{lastBuildDate} = time; - return $rss; + return ($ver, $rss); } @@ -169,17 +187,21 @@ sub send { my $obj = shift || return error('No object defined!'); my $vars = shift || return error('No data defined!'); - ++$obj->{COUNT}; + while($obj->{STACK} && scalar @{$obj->{STACK}} > 100) { + shift(@{$obj->{STACK}}); + } push(@{$obj->{STACK}}, [ + ++$obj->{COUNT}, entities($vars->{Title}), entities($vars->{Url}), entities($vars->{Text}), datum($vars->{AddDate},'int'), - $vars->{LevelName}, + $vars->{category}, ]); + $obj->{lastAddDate} = time; - lg sprintf('News RSS with nr. %d successfully send at %s', $obj->{COUNT}, scalar localtime); + lg sprintf('Insert rss item (%d)', $obj->{COUNT}); 1; } @@ -192,14 +214,7 @@ sub read { return undef, lg('This function is deactivated!') if($obj->{active} ne 'y'); - - $vars->{count} = ++$obj->{NEWSCOUNT}; - $vars->{host} = $obj->{host}; - $vars->{port} = main::getModule('HTTPD')->{Port}; - - $obj->send($vars); - - return 1; + return $obj->send($vars); } # ------------------ @@ -211,20 +226,31 @@ sub req { return gettext('The module NEWS::RSS is not active!') if($obj->{active} ne 'y'); - my $rss = $obj->createRSS($params->{version}) - || return error('Problem to create a RSS Object!'); + my ($ver, $rss) = $obj->createRSS($params->{version}); + return 0 unless($rss); foreach my $entry (@{$obj->{STACK}}) { - my ($title, $link, $descr, $adddate, $level) = @{$entry}; - $rss->add_item( - title => $title, - link => $link, - description => $descr, - dc => { - date => $adddate, - subject => $level - }, - ); + my ($item, $title, $link, $descr, $adddate, $category) = @{$entry}; + if($ver == 1) { + $rss->add_item( + title => $title, + link => $link, + description => $descr, + dc => { + date => $adddate, + subject => $category, + }, + ); + } else { + $rss->add_item( + title => $title, + link => $link, + description => $descr, + pubDate => $adddate, + category => $category, + guid => sprintf(gettext('RSS item %d at %s'), $item, $adddate), + ); + } } return $rss->as_string; diff --git a/lib/XXV/OUTPUT/NEWS/VDR.pm b/lib/XXV/OUTPUT/NEWS/VDR.pm index c0072a9..0578b5a 100644 --- a/lib/XXV/OUTPUT/NEWS/VDR.pm +++ b/lib/XXV/OUTPUT/NEWS/VDR.pm @@ -31,20 +31,37 @@ sub module { check => sub { my $value = shift; my $erg = $obj->init - or return error('Problem to initialize news module') + or return undef, gettext("Can't initialize news modul!") if($value eq 'y' and not exists $obj->{INITE}); + if($value eq 'y') { + my $emodule = main::getModule('EVENTS'); + if(!$emodule or $emodule->{active} ne 'y') { + return undef, sprintf(gettext("Modul can't activated! This modul depends modul %s."),'EVENTS'); + } + my $rmodule = main::getModule('REPORT'); + if(!$rmodule or $rmodule->{active} ne 'y') { + return undef, sprintf(gettext("Modul can't activated! This modul depends modul %s."),'REPORT'); + } + } return $value; }, }, level => { - description => gettext('Minimum level of messages which can be displayed (1 ... 100)'), + description => gettext('Category of messages that should displayed'), default => 1, - type => 'integer', + type => 'list', + choices => sub { + my $rmodule = main::getModule('REPORT'); + return undef unless($rmodule); + my $erg = $rmodule->get_level_as_array(); + map { my $x = $_->[1]; $_->[1] = $_->[0]; $_->[0] = $x; } @$erg; + return @$erg; + }, required => gettext('This is required!'), check => sub { my $value = int(shift) || 0; unless($value >= 1 and $value <= 100) { - return undef, 'Sorry, but the value must be between 1 and 100'; + return undef, sprintf(gettext('Sorry, but value must be between %d and %d'),1,100); } return $value; }, @@ -87,8 +104,8 @@ sub new { main::after(sub{ # The Initprocess my $erg = $self->init - or return error('Problem to initialize news modul!'); - }, "NEWS::VDR: Start initiate news vdr module ...") + or return error("Can't initialize news modul!"); + }, "NEWS::VDR: Start initiate news modul ...") if($self->{active} eq 'y'); return $self; @@ -98,9 +115,8 @@ sub new { sub init { # ------------------ my $obj = shift || return error('No object defined!'); - my $url = sprintf("http://%s:%s/", $obj->{host}, main::getModule('HTTPD')->{Port}); - $obj->{INITE} = 1; + $obj->{INITE} = 1; $obj->{SVDRP} = main::getModule('SVDRP'); 1; @@ -112,19 +128,17 @@ sub send { my $obj = shift || return error('No object defined!'); my $vars = shift || return error('No data defined!'); - return undef, lg('This function is deactivated!') + return lg('This function is deactivated!') if($obj->{active} ne 'y'); - return undef, lg('Title is not set!') + return lg('Title is not set!') unless($vars->{Title}); my $cmd = sprintf('MESG %s', $vars->{Title}); my $svdrp = $obj->{SVDRP} || return error ('No SVDRP!' ); - $svdrp->command($cmd); - - 1; + return $svdrp->command($cmd); } # ------------------ @@ -134,8 +148,6 @@ sub read { my $vars = shift || return error('No data defined!'); return $obj->send($vars); - - 1; } # ------------------ @@ -149,17 +161,18 @@ sub req { my $vars = { AddDate => time, - Title => 'This is only a Test for the xxv news vdr module!', - Text => 'This is only a Test for the xxv news vdr module!', + Title => 'This is only a test from xxv news vdr modul!', + Text => 'This is only a test from xxv news vdr modul!', Cmd => 'request', Id => 'vdr', - Url => sprintf("http://%s:%s/", $obj->{host}, main::getModule('HTTPD')->{Port}), Level => 'harmless', }; - $obj->read($vars); - - return gettext('A message has been sent to your VDR!'); + if( $obj->read($vars) ) { + return gettext("Message was been sent to your VDR!"); + } else { + return gettext("Message chould'nt been sent to your VDR!"); + } } |
