summaryrefslogtreecommitdiff
path: root/lib/XXV/OUTPUT
diff options
context:
space:
mode:
authorAndreas Brachold <vdr07@deltab.de>2008-08-10 14:05:26 +0000
committerAndreas Brachold <vdr07@deltab.de>2008-08-10 14:05:26 +0000
commit2e9c00e1bdd19f3fb61ce0aaede85d5f5400ef81 (patch)
treebf3734ba1dbfb0e8c5df072c55b19b62603135b5 /lib/XXV/OUTPUT
parent11ad754da4d127a74e26894e97c232a3a98972b5 (diff)
downloadxxv-2e9c00e1bdd19f3fb61ce0aaede85d5f5400ef81.tar.gz
xxv-2e9c00e1bdd19f3fb61ce0aaede85d5f5400ef81.tar.bz2
* AUTOTIMER: fix some orthography
* EVENTS: store news from last month into database * RSS: dump news from database * TIMERS: event if timer adjusted * TIMERS/AUTOTIMER: rewrite event/news handling * xxvd: show pid at startup * xxvd: show base revision at startup * CHANNELS: fix detect radio channels * REPORT: Refactoring event handling, move any function to modul EVENTS. * EVENTS: elist function to list news as table * EVENTS: respect minimum level to exclude unwanted harmless news * RSS/MAIL... : remove dependency to modul REPORT
Diffstat (limited to 'lib/XXV/OUTPUT')
-rw-r--r--lib/XXV/OUTPUT/Html.pm8
-rw-r--r--lib/XXV/OUTPUT/NEWS/JABBER.pm76
-rw-r--r--lib/XXV/OUTPUT/NEWS/MAIL.pm207
-rw-r--r--lib/XXV/OUTPUT/NEWS/RSS.pm137
-rw-r--r--lib/XXV/OUTPUT/NEWS/VDR.pm61
5 files changed, 265 insertions, 224 deletions
diff --git a/lib/XXV/OUTPUT/Html.pm b/lib/XXV/OUTPUT/Html.pm
index 0bd2473..9b2ba5d 100644
--- a/lib/XXV/OUTPUT/Html.pm
+++ b/lib/XXV/OUTPUT/Html.pm
@@ -1058,6 +1058,10 @@ sub parseData {
$self->parseData($dta->{$name});
} else {
$dta->{$name} = reentities($dta->{$name}) if($self->{hasentities});
+ #if($self->{charset} eq 'UTF-8'
+ # && $dta->{$name} && !utf8::is_utf8($dta->{$name})) {
+ # utf8::upgrade($dta->{$name});
+ #}
$dta->{$name} = entities($dta->{$name});
}
}
@@ -1067,6 +1071,10 @@ sub parseData {
$self->parseData($_);
} else {
$_ = reentities($_) if($self->{hasentities});
+ #if($self->{charset} eq 'UTF-8'
+ # && $_ && !utf8::is_utf8($_)) {
+ # utf8::upgrade($_);
+ #}
$_ = entities($_);
}
}
diff --git a/lib/XXV/OUTPUT/NEWS/JABBER.pm b/lib/XXV/OUTPUT/NEWS/JABBER.pm
index 481dd8d..273775a 100644
--- a/lib/XXV/OUTPUT/NEWS/JABBER.pm
+++ b/lib/XXV/OUTPUT/NEWS/JABBER.pm
@@ -3,16 +3,17 @@ use strict;
use Tools;
-# News Modules have only three methods
+# News Modules have only this methods
# init - for intervall or others
# send - send the informations
-# read - read the news and parse it
+# push - push the news and parse it
+# req - read the actual news print this out
# This module method must exist for XXV
# ------------------
sub module {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $args = {
Name => 'NEWS::JABBER',
Prereq => {
@@ -68,18 +69,14 @@ Then you must receive a message in your running jabber client.
required => gettext('This is required!'),
check => sub {
my $value = shift;
- my $erg = $obj->init
+ my $erg = $self->init
or return undef, gettext("Can't initialize news module!")
- if($value eq 'y' and not exists $obj->{JCON});
+ if($value eq 'y' and not exists $self->{JCON});
if($value eq 'y') {
- my $emodule = main::getModule('EVENTS');
- if(!$emodule or $emodule->{active} ne 'y') {
+ my $emod = main::getModule('EVENTS');
+ if(!$emod or $emod->{active} ne 'y') {
return undef, sprintf(gettext("Module can't activated! This module depends module %s."),'EVENTS');
}
- my $rmodule = main::getModule('REPORT');
- if(!$rmodule or $rmodule->{active} ne 'y') {
- return undef, sprintf(gettext("Module can't activated! This module depends module %s."),'REPORT');
- }
}
return $value;
},
@@ -89,18 +86,18 @@ Then you must receive a message in your running jabber client.
default => 1,
type => 'list',
choices => sub {
- my $rmodule = main::getModule('REPORT');
- return undef unless($rmodule);
- my $erg = $rmodule->get_level_as_array();
+ my $emod = main::getModule('EVENTS');
+ return undef unless($emod);
+ my $erg = $emod->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;
- my $rmodule = main::getModule('REPORT');
- return undef unless($rmodule);
- my $erg = $rmodule->get_level_as_array();
+ my $emod = main::getModule('EVENTS');
+ return undef unless($emod);
+ my $erg = $emod->get_level_as_array();
unless($value >= $erg->[0]->[0] and $value <= $erg->[-1]->[0]) {
return undef,
sprintf(gettext('Sorry, but value must be between %d and %d'),
@@ -162,7 +159,8 @@ sub new {
# all configvalues to $self without parents (important for ConfigModule)
map {
- $self->{$_} = $attr{'-config'}->{$self->{MOD}->{Name}}->{$_} || $self->{MOD}->{Preferences}->{$_}->{default}
+ $self->{$_} = $attr{'-config'}->{$self->{MOD}->{Name}}->{$_};
+ $self->{$_} = $self->{MOD}->{Preferences}->{$_}->{default} unless($self->{$_});
} keys %{$self->{MOD}->{Preferences}};
# Try to use the Requirments
@@ -190,7 +188,7 @@ sub new {
# ------------------
sub init {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
1;
}
@@ -198,13 +196,13 @@ sub init {
# ------------------
sub jconnect {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $jcon = Net::XMPP::Client->new(
debuglevel => 0,
) || return error("Can't create jabber client");
- my ($user, $server) = split('\@', $obj->{user});
+ my ($user, $server) = split('\@', $self->{user});
debug sprintf("Connecting to jabber server: %s ...", $server);
@@ -212,25 +210,25 @@ sub jconnect {
hostname => $server,
);
return
- unless($obj->xmpp_check_result("Connect",\@res,$jcon));
+ unless($self->xmpp_check_result("Connect",\@res,$jcon));
debug sprintf("Authentificat with User:%s ...", $user);
@res = $jcon->AuthSend(
'hostname'=>$server,
'username'=>$user,
- 'password'=>$obj->{passwd},
+ 'password'=>$self->{passwd},
'resource'=>'xxv'
);
return $jcon
- if($obj->xmpp_check_result("Login",\@res,$jcon));
+ if($self->xmpp_check_result("Login",\@res,$jcon));
}
# ------------------
sub jdisconnect {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $cnx = shift || 0;
$cnx->Disconnect()
@@ -243,33 +241,33 @@ sub jdisconnect {
# ------------------
sub send {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $vars = shift || return error('No data defined!');
return undef, lg('This function is deactivated!')
- if($obj->{active} ne 'y');
+ if($self->{active} ne 'y');
- my $cnx = $obj->jconnect()
+ my $cnx = $self->jconnect()
|| return error ('No connected JabberClient!' );
$cnx->MessageSend(
- 'to' => $obj->{receiveUser},
+ 'to' => $self->{receiveUser},
'subject'=> $vars->{Title},
'body' => ($vars->{Text} || $vars->{Url}),
);
- $cnx = $obj->jdisconnect($cnx);
+ $cnx = $self->jdisconnect($cnx);
1;
}
# ------------------
-sub read {
+sub push {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $vars = shift || return error('No data defined!');
- return $obj->send($vars);
+ return $self->send($vars);
1;
}
@@ -277,10 +275,10 @@ sub read {
# ------------------
sub req {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
return gettext('The module NEWS::JABBER is not active!')
- if($obj->{active} ne 'y');
+ if($self->{active} ne 'y');
my $vars = {
AddDate => time,
@@ -289,17 +287,17 @@ sub req {
Level => 100,
};
- if($obj->send($vars)) {
- return sprintf('Message is send to %s at %s', $obj->{receiveUser}, datum($vars->{AddDate}));
+ if($self->send($vars)) {
+ return sprintf('Message is send to %s at %s', $self->{receiveUser}, datum($vars->{AddDate}));
} else {
- return sprintf("Sorry, couldn't send message to %s at %s", $obj->{receiveUser}, datum($vars->{AddDate}));
+ return sprintf("Sorry, couldn't send message to %s at %s", $self->{receiveUser}, datum($vars->{AddDate}));
}
}
# ------------------
sub xmpp_check_result {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my ($txt,$res,$cnx)=@_;
return error("Error '$txt': result undefined")
diff --git a/lib/XXV/OUTPUT/NEWS/MAIL.pm b/lib/XXV/OUTPUT/NEWS/MAIL.pm
index 66d9a5c..60ae109 100644
--- a/lib/XXV/OUTPUT/NEWS/MAIL.pm
+++ b/lib/XXV/OUTPUT/NEWS/MAIL.pm
@@ -7,14 +7,14 @@ use POSIX qw(locale_h);
# News Modules have only this methods
# init - for intervall or others
# send - send the informations
-# read - read the news and parse it
+# push - push the news and parse it
# req - read the actual news print this out
# This module method must exist for XXV
# ------------------
sub module {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $args = {
Name => 'NEWS::MAIL',
Prereq => {
@@ -33,19 +33,15 @@ sub module {
required => gettext('This is required!'),
check => sub {
my $value = shift;
- my $erg = $obj->init
+ my $erg = $self->init
or return undef, gettext("Can't initialize news module!")
- if($value eq 'y' and not exists $obj->{INITE});
+ if($value eq 'y' and not exists $self->{INITE});
return $value;
if($value eq 'y') {
- my $emodule = main::getModule('EVENTS');
- if(!$emodule or $emodule->{active} ne 'y') {
+ my $emod = main::getModule('EVENTS');
+ if(!$emod or $emod->{active} ne 'y') {
return undef, sprintf(gettext("Module can't activated! This module depends module %s."),'EVENTS');
}
- my $rmodule = main::getModule('REPORT');
- if(!$rmodule or $rmodule->{active} ne 'y') {
- return undef, sprintf(gettext("Module can't activated! This module depends module %s."),'REPORT');
- }
}
},
},
@@ -54,18 +50,18 @@ sub module {
default => 1,
type => 'list',
choices => sub {
- my $rmodule = main::getModule('REPORT');
- return undef unless($rmodule);
- my $erg = $rmodule->get_level_as_array();
+ my $emod = main::getModule('EVENTS');
+ return undef unless($emod);
+ my $erg = $emod->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;
- my $rmodule = main::getModule('REPORT');
- return undef unless($rmodule);
- my $erg = $rmodule->get_level_as_array();
+ my $emod = main::getModule('EVENTS');
+ return undef unless($emod);
+ my $erg = $emod->get_level_as_array();
unless($value >= $erg->[0]->[0] and $value <= $erg->[-1]->[0]) {
return undef,
sprintf(gettext('Sorry, but value must be between %d and %d'),
@@ -81,9 +77,9 @@ sub module {
required => gettext('This is required!'),
check => sub {
my $value = int(shift) || 0;
- if($value and ref $obj->{INTERVAL}) {
+ if($value and ref $self->{TIMER}) {
my $newinterval = $value*3600;
- $obj->{INTERVAL}->interval($newinterval);
+ $self->{TIMER}->interval($newinterval);
}
return $value;
},
@@ -139,18 +135,22 @@ sub new {
my $self = {};
bless($self, $class);
+ # read the DB Handle
+ $self->{dbh} = delete $attr{'-dbh'};
+
# paths
$self->{paths} = delete $attr{'-paths'};
# host
$self->{host} = delete $attr{'-host'};
- # who am I
+ # who am I
$self->{MOD} = $self->module;
# all configvalues to $self without parents (important for ConfigModule)
map {
- $self->{$_} = $attr{'-config'}->{$self->{MOD}->{Name}}->{$_} || $self->{MOD}->{Preferences}->{$_}->{default}
+ $self->{$_} = $attr{'-config'}->{$self->{MOD}->{Name}}->{$_};
+ $self->{$_} = $self->{MOD}->{Preferences}->{$_}->{default} unless($self->{$_});
} keys %{$self->{MOD}->{Preferences}};
# Try to use the Requirments
@@ -185,8 +185,7 @@ sub new {
# The Initprocess
my $erg = $self->init
- or return error("Can't initialize news module!")
- if($self->{active} eq 'y');
+ or return error("Can't initialize news module!");
$self->{TYP} = 'text/plain';
@@ -196,21 +195,24 @@ sub new {
# ------------------
sub init {
# ------------------
- my $obj = shift || return error('No object defined!');
- $obj->{INITE} = 1;
+ my $self = shift || return error('No object defined!');
+ $self->{INITE} = 1;
- $obj->{LastReportTime} = time;
+ $self->{LastReportTime} = main::getStartTime();
# Interval to send the next mail
- $obj->{INTERVAL} = Event->timer(
- interval => $obj->{interval}*3600,
+ $self->{TIMER} = Event->timer(
+ interval => $self->{interval}*3600,
prio => 6, # -1 very hard ... 6 very low
cb => sub{
- $obj->send();
+ if($self->{active} eq 'y') {
+ my $content = $self->_req();
+ $self->send($content);
+ }
},
);
- $obj->{COUNT} = 1;
+ $self->{COUNT} = 1;
1;
}
@@ -218,54 +220,55 @@ sub init {
# ------------------
sub send {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
return error('This function is deactivated!')
- if($obj->{active} ne 'y');
+ if($self->{active} ne 'y');
- ++$obj->{COUNT};
+ my $content = $self->_req();
- my $content = $obj->req();
+ my @addresses = split(/\s*,\s*/, $self->{address});
+
+ my $mail = new Mail::SendEasy(
+ smtp => $self->{smtp},
+ user => $self->{susr},
+ pass => $self->{spwd}
+ );
- my $smod = main::getModule('STATUS');
- my @addresses = split(/\s*,\s*/, $obj->{address});
# Send mail
- my $status = Mail::SendEasy::send(
- smtp => $obj->{smtp},
- user => $obj->{susr},
- pass => $obj->{spwd},
- from => $obj->{from_address},
+ my $status = $mail->send(
+ from => $self->{from_address},
from_title => 'XXV MailNewsAgent',
to => shift @addresses ,
cc => join(',', @addresses),
- subject => "News from your XXV System!" ,
+ subject => gettext("News from your XXV System!"),
msg => $content,
- msgid => $obj->{COUNT},
- ) || return error sprintf("Can't send mail: %s", $Mail::SendEasy::ER);
+ msgid => $self->{COUNT},
+ ) || return error sprintf("Can't send mail: %s", $mail->error);
- $obj->{LastReportTime} = time;
+ lg sprintf('Mail %d. send successfully', $self->{COUNT}++);
- lg sprintf('Mail %d. send successfully', $obj->{COUNT});
- $obj->{NEWSLETTER} = undef;
1;
}
# ------------------
sub parseHeader {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
+ my $newscnt = shift || 0;
+
my $output = '';
my $vars = {
- msgnr => $obj->{COUNT},
+ msgnr => $self->{COUNT},
date => datum(time),
- anzahl=> $obj->{NEWSCOUNT},
+ anzahl=> $newscnt,
};
- my $template = $obj->{TEMPLATES}->{'header'};
- $obj->{tt}->process($template, $vars, \$output)
- or return error($obj->{tt}->error());
+ my $template = $self->{TEMPLATES}->{'header'};
+ $self->{tt}->process($template, $vars, \$output)
+ or return error($self->{tt}->error());
return $output;
}
@@ -273,63 +276,107 @@ sub parseHeader {
# ------------------
sub parseFooter {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $output = '';
my $vars = {
usage => main::getModule('RECORDS')->{CapacityMessage},
uptime => main::getModule('STATUS')->uptime,
- lastreport => datum($obj->{LastReportTime}),
+ lastreport => datum($self->{LastReportTime}),
};
- my $template = $obj->{TEMPLATES}->{'footer'};
- $obj->{tt}->process($template, $vars, \$output)
- or return error($obj->{tt}->error());
+ my $template = $self->{TEMPLATES}->{'footer'};
+ $self->{tt}->process($template, $vars, \$output)
+ or return error($self->{tt}->error());
return $output;
}
# ------------------
-sub read {
+sub push {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $vars = shift || return error('No data defined!');
- my $output = '';
- $vars->{count} = ++$obj->{NEWSCOUNT};
- $vars->{host} = $obj->{host};
- $vars->{port} = main::getModule('HTTPD')->{Port};
-
- my $template = $obj->{TEMPLATES}->{'content'};
- $obj->{tt}->process($template, $vars, \$output)
- or return error($obj->{tt}->error());
-
- $obj->{NEWSLETTER} .= $output;
-
- return $output;
+ return undef;
}
# ------------------
sub req {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
+ my $params = shift || {};
+
+ if($params->{test}) {
+ my $content = $self->_req(1);
+ if($self->send($content)) {
+ return gettext('A mail with the following content has been sent to your mail account!')
+ . "\n\n"
+ . $content;
+ } else {
+ return gettext("Mail with the following content could'nt sent to your mail account!")
+ . "\n\n"
+ . $content;
+ }
+ }
+ return $self->_req(1);
+}
+# ------------------
+sub _req {
+# ------------------
+ my $self = shift || return error('No object defined!');
my $test = shift || 0;
return gettext('The module NEWS::Mail is not active!')
- if($obj->{active} ne 'y');
+ if($self->{active} ne 'y');
my $content = '';
- if($test) {
- $obj->send;
- $content .= gettext('A mail with the following content has been sent to your mail account!');
- $content .= "\n\n";
+
+ my $sql = "SELECT SQL_CACHE id, title, message, cmd, data, level, UNIX_TIMESTAMP(addtime) from EVENTS where level >= ? AND UNIX_TIMESTAMP(addtime) >= ? order by addtime desc";
+ my $sth = $self->{dbh}->prepare($sql);
+ $sth->execute($self->{level}, $self->{LastReportTime})
+ or return error sprintf("Couldn't execute query: %s.",$sth->errstr);
+ my $data = $sth->fetchall_arrayref();
+
+ $content .= $self->parseHeader($data ? scalar @$data : 0);
+
+ my $emod = main::getModule('EVENTS');
+ my $hmod = main::getModule('HTTPD');
+ my $url = sprintf("http://%s:%s/", $self->{host}, $hmod->{Port});
+
+ foreach my $entry (@{$data}) {
+ my ($id, $title, $message, $cmd, $data, $level, $addtime) = @{$entry};
+
+ my $link = $url;
+ $link .= sprintf("?cmd=%s&data=%s", $cmd, $data)
+ if($cmd && $data);
+
+ my $vars = {
+ AddDate => $addtime,
+ Title => $title,
+ Text => $message,
+ Cmd => $cmd,
+ Id => $data,
+ Url => $link,
+ Level => $level,
+ category => $emod->translate_scala($level),
+ count => $id,
+ host => $self->{host},
+ port => $hmod->{Port},
+ };
+
+ my $output = '';
+ my $template = $self->{TEMPLATES}->{'content'};
+ $self->{tt}->process($template, $vars, \$output)
+ or return error($self->{tt}->error());
+ $content .= $output;
}
- $content .= $obj->parseHeader();
- $content .= $obj->{NEWSLETTER};
- $content .= $obj->parseFooter();
+ $content .= $self->parseFooter();
+
+ $self->{LastReportTime} = time unless($test);
return $content;
}
diff --git a/lib/XXV/OUTPUT/NEWS/RSS.pm b/lib/XXV/OUTPUT/NEWS/RSS.pm
index 376a438..7ede3f3 100644
--- a/lib/XXV/OUTPUT/NEWS/RSS.pm
+++ b/lib/XXV/OUTPUT/NEWS/RSS.pm
@@ -4,16 +4,17 @@ use strict;
use Tools;
use POSIX qw(locale_h);
-# News Modules have only three methods
+# News Modules have only this methods
# init - for intervall or others
# send - send the informations
-# read - read the news and parse it
+# push - push the news and parse it
+# req - read the actual news print this out
# This module method must exist for XXV
# ------------------
sub module {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $args = {
Name => 'NEWS::RSS',
Prereq => {
@@ -32,18 +33,14 @@ sub module {
required => gettext('This is required!'),
check => sub {
my $value = shift;
- my $erg = $obj->init
+ my $erg = $self->init
or return undef, gettext("Can't initialize news module!")
- if($value eq 'y' and not exists $obj->{INITE});
+ if($value eq 'y' and not exists $self->{INITE});
if($value eq 'y') {
- my $emodule = main::getModule('EVENTS');
- if(!$emodule or $emodule->{active} ne 'y') {
+ my $emod = main::getModule('EVENTS');
+ if(!$emod or $emod->{active} ne 'y') {
return undef, sprintf(gettext("Module can't activated! This module depends module %s."),'EVENTS');
}
- my $rmodule = main::getModule('REPORT');
- if(!$rmodule or $rmodule->{active} ne 'y') {
- return undef, sprintf(gettext("Module can't activated! This module depends module %s."),'REPORT');
- }
}
return $value;
},
@@ -53,18 +50,18 @@ sub module {
default => 1,
type => 'list',
choices => sub {
- my $rmodule = main::getModule('REPORT');
- return undef unless($rmodule);
- my $erg = $rmodule->get_level_as_array();
+ my $emod = main::getModule('EVENTS');
+ return undef unless($emod);
+ my $erg = $emod->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;
- my $rmodule = main::getModule('REPORT');
- return undef unless($rmodule);
- my $erg = $rmodule->get_level_as_array();
+ my $emod = main::getModule('EVENTS');
+ return undef unless($emod);
+ my $erg = $emod->get_level_as_array();
unless($value >= $erg->[0]->[0] and $value <= $erg->[-1]->[0]) {
return undef,
sprintf(gettext('Sorry, but value must be between %d and %d'),
@@ -85,18 +82,22 @@ sub new {
my $self = {};
bless($self, $class);
+ # read the DB Handle
+ $self->{dbh} = delete $attr{'-dbh'};
+
# paths
$self->{paths} = delete $attr{'-paths'};
# host
$self->{host} = delete $attr{'-host'};
- # who am I
+ # who am I
$self->{MOD} = $self->module;
# all configvalues to $self without parents (important for ConfigModule)
map {
- $self->{$_} = $attr{'-config'}->{$self->{MOD}->{Name}}->{$_} || $self->{MOD}->{Preferences}->{$_}->{default}
+ $self->{$_} = $attr{'-config'}->{$self->{MOD}->{Name}}->{$_};
+ $self->{$_} = $self->{MOD}->{Preferences}->{$_}->{default} unless($self->{$_});
} keys %{$self->{MOD}->{Preferences}};
# Try to use the Requirments
@@ -118,16 +119,14 @@ sub new {
}, "NEWS::RSS: Start initiate rss feed ...")
if($self->{active} eq 'y');
-
-
return $self;
}
# ------------------
sub init {
# ------------------
- my $obj = shift || return error('No object defined!');
- $obj->{INITE} = 1;
+ my $self = shift || return error('No object defined!');
+ $self->{INITE} = 1;
1;
}
@@ -135,10 +134,12 @@ sub init {
# ------------------
sub createRSS {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
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});
+ my $lastaddtime = shift;
+ my $url = shift;
+
+ my $account = sprintf("%s@%s", $ENV{USER}, $self->{host});
my $rss;
if($ver == 1) {
@@ -149,8 +150,8 @@ sub createRSS {
$rss->channel(
title => gettext("XXV RSS 1.0"),
- 'link' => $url,
- description => gettext("Important messages from your VDR/XXV"),
+ 'link' => $url,
+ description => gettext("Messages from your VDR/XXV"),
dc => {
date => datum(time,'int'),
subject => gettext("XXV messages"),
@@ -165,8 +166,6 @@ 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',
@@ -175,76 +174,66 @@ sub createRSS {
$rss->channel(
title => gettext("XXV RSS 2.0"),
'link' => $url,
- description => gettext("Important messages from your VDR/XXV"),
+ description => gettext("Messages from your VDR/XXV"),
language => setlocale(POSIX::LC_MESSAGES),
- pubDate => datum($lastadd, 'rss'),
- lastBuildDate => datum($lastbuild, 'rss'),
+ pubDate => datum($lastaddtime, 'rss'),
+ lastBuildDate => datum(time, 'rss'),
managingEditor => $account,
);
}
- $obj->{lastBuildDate} = time;
return ($ver, $rss);
}
# ------------------
-sub send {
+sub push {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $vars = shift || return error('No data defined!');
- 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->{category},
- ]);
- $obj->{lastAddDate} = time;
-
- lg sprintf('Insert rss item (%d)', $obj->{COUNT});
- 1;
-}
-
-# ------------------
-sub read {
-# ------------------
- my $obj = shift || return error('No object defined!');
- my $vars = shift || return error('No data defined!');
-
- return undef, lg('This function is deactivated!')
- if($obj->{active} ne 'y');
-
- return $obj->send($vars);
+ return;
}
# ------------------
sub req {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $params = shift || {};
return gettext('The module NEWS::RSS is not active!')
- if($obj->{active} ne 'y');
+ if($self->{active} ne 'y');
- my ($ver, $rss) = $obj->createRSS($params->{version});
+ my $sql = "SELECT SQL_CACHE id, title, message, cmd, data, level, UNIX_TIMESTAMP(addtime) from EVENTS where level >= ? order by addtime desc LIMIT 0,50";
+ my $sth = $self->{dbh}->prepare($sql);
+ $sth->execute($self->{level})
+ or return error sprintf("Couldn't execute query: %s.",$sth->errstr);
+ my $data = $sth->fetchall_arrayref();
+
+ my $lastaddtime = ($data && scalar @$data) ? $data->[0]->[6] : time;
+
+ my $url = sprintf("http://%s:%s", $self->{host}, main::getModule('HTTPD')->{Port});
+ my ($ver, $rss) = $self->createRSS($params->{version}, $lastaddtime, $url);
return 0 unless($rss);
- foreach my $entry (@{$obj->{STACK}}) {
- my ($item, $title, $link, $descr, $adddate, $category) = @{$entry};
+ my $emod = main::getModule('EVENTS');
+ foreach my $entry (@{$data}) {
+ my ($id, $title, $message, $cmd, $data, $level, $addtime) = @{$entry};
+
+ my $link = '';
+ $link = sprintf("%s/?cmd=%s&data=%s", $url, $cmd, $data)
+ if($cmd && $data);
+
+ my $category = $emod->translate_scala($level);
+ $message =~ s/\r\n/<br \/>/g;
+
if($ver == 1) {
$rss->add_item(
title => $title,
link => $link,
- description => $descr,
+ description => entities($message),
dc => {
- date => $adddate,
+ date => datum($addtime, 'rss'),
subject => $category,
},
);
@@ -252,10 +241,10 @@ sub req {
$rss->add_item(
title => $title,
link => $link,
- description => $descr,
- pubDate => $adddate,
+ description => entities($message),
+ pubDate => datum($addtime, 'rss'),
category => $category,
- guid => sprintf(gettext('RSS item %d at %s'), $item, $adddate),
+ guid => $id,
);
}
}
diff --git a/lib/XXV/OUTPUT/NEWS/VDR.pm b/lib/XXV/OUTPUT/NEWS/VDR.pm
index 9f90c01..95beb59 100644
--- a/lib/XXV/OUTPUT/NEWS/VDR.pm
+++ b/lib/XXV/OUTPUT/NEWS/VDR.pm
@@ -4,16 +4,17 @@ use strict;
use Tools;
use POSIX qw(locale_h);
-# News Modules have only three methods
+# News Modules have only this methods
# init - for intervall or others
# send - send the informations
-# read - read the news and parse it
+# push - push the news and parse it
+# req - read the actual news print this out
# This module method must exist for XXV
# ------------------
sub module {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $args = {
Name => 'NEWS::VDR',
Description => gettext('This NEWS module generates messages for the VDR interface.'),
@@ -29,18 +30,14 @@ sub module {
required => gettext('This is required!'),
check => sub {
my $value = shift;
- my $erg = $obj->init
+ my $erg = $self->init
or return undef, gettext("Can't initialize news module!")
- if($value eq 'y' and not exists $obj->{INITE});
+ if($value eq 'y' and not exists $self->{INITE});
if($value eq 'y') {
- my $emodule = main::getModule('EVENTS');
- if(!$emodule or $emodule->{active} ne 'y') {
+ my $emod = main::getModule('EVENTS');
+ if(!$emod or $emod->{active} ne 'y') {
return undef, sprintf(gettext("Module can't activated! This module depends module %s."),'EVENTS');
}
- my $rmodule = main::getModule('REPORT');
- if(!$rmodule or $rmodule->{active} ne 'y') {
- return undef, sprintf(gettext("Module can't activated! This module depends module %s."),'REPORT');
- }
}
return $value;
},
@@ -50,18 +47,18 @@ sub module {
default => 1,
type => 'list',
choices => sub {
- my $rmodule = main::getModule('REPORT');
- return undef unless($rmodule);
- my $erg = $rmodule->get_level_as_array();
+ my $emod = main::getModule('EVENTS');
+ return undef unless($emod);
+ my $erg = $emod->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;
- my $rmodule = main::getModule('REPORT');
- return undef unless($rmodule);
- my $erg = $rmodule->get_level_as_array();
+ my $emod = main::getModule('EVENTS');
+ return undef unless($emod);
+ my $erg = $emod->get_level_as_array();
unless($value >= $erg->[0]->[0] and $value <= $erg->[-1]->[0]) {
return undef,
sprintf(gettext('Sorry, but value must be between %d and %d'),
@@ -93,7 +90,8 @@ sub new {
# all configvalues to $self without parents (important for ConfigModule)
map {
- $self->{$_} = $attr{'-config'}->{$self->{MOD}->{Name}}->{$_} || $self->{MOD}->{Preferences}->{$_}->{default}
+ $self->{$_} = $attr{'-config'}->{$self->{MOD}->{Name}}->{$_};
+ $self->{$_} = $self->{MOD}->{Preferences}->{$_}->{default} unless($self->{$_});
} keys %{$self->{MOD}->{Preferences}};
# Try to use the Requirments
@@ -121,10 +119,10 @@ sub new {
# ------------------
sub init {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
- $obj->{INITE} = 1;
- $obj->{SVDRP} = main::getModule('SVDRP');
+ $self->{INITE} = 1;
+ $self->{SVDRP} = main::getModule('SVDRP');
1;
}
@@ -132,39 +130,40 @@ sub init {
# ------------------
sub send {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $vars = shift || return error('No data defined!');
return lg('This function is deactivated!')
- if($obj->{active} ne 'y');
+ if($self->{active} ne 'y');
return lg('Title is not set!')
unless($vars->{Title});
+ return undef unless($vars->{level} >= $self->{level} );
my $cmd = sprintf('MESG %s', $vars->{Title});
- my $svdrp = $obj->{SVDRP} || return error ('No SVDRP!' );
+ my $svdrp = $self->{SVDRP} || return error ('No SVDRP!' );
return $svdrp->command($cmd);
}
# ------------------
-sub read {
+sub push {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $vars = shift || return error('No data defined!');
- return $obj->send($vars);
+ return $self->send($vars);
}
# ------------------
sub req {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $test = shift || 0;
return gettext('The module NEWS::VDR is not active!')
- if($obj->{active} ne 'y');
+ if($self->{active} ne 'y');
my $vars = {
AddDate => time,
@@ -172,10 +171,10 @@ sub req {
Text => 'This is only a test from xxv news vdr modul!',
Cmd => 'request',
Id => 'vdr',
- Level => 'harmless',
+ Level => 100,
};
- if( $obj->read($vars) ) {
+ if( $self->send($vars) ) {
return gettext("Message was been sent to your VDR!");
} else {
return gettext("Message chould'nt been sent to your VDR!");