Lemonldap-NG-Manager
view release on metacpan or search on metacpan
lib/Lemonldap/NG/Manager/Notifications.pm view on Meta::CPAN
my $dDate = strftime( "%Y-%m-%d", localtime() );
if ( $json->{date} ) {
$self->logger->debug(
"Posted data : uid = $json->{uid} - Ref = $json->{reference} - Date = $json->{date}"
);
}
else {
$self->logger->debug(
"Posted data : uid = $json->{uid} - Ref = $json->{reference} - Date = ???"
);
$json->{date} = $dDate;
}
# Check if posted date > today
unless ( $json->{date} ge $dDate ) {
$self->logger->debug("Posted Date < today");
$json->{date} = $dDate;
}
$self->logger->debug("Notification Date = $json->{date}");
unless ( $json->{date} =~ /^\d{4}-\d{2}-\d{2}$/ ) {
$self->logger->error("Malformed date");
return $self->sendError( $req, "Malformed date", 200 );
}
my $newNotif;
if ( $self->notifFormat eq 'XML' ) {
utf8::decode( $json->{xml} );
$newNotif = qq#<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<root><notification #
. join(
' ',
map {
if ( my $t = $json->{$_} ) { $t =~ s/"/'/g; qq#$_="$t"# }
else { () }
} (qw(uid date reference condition))
) . ">$json->{xml}</notification></root>";
}
else {
eval {
my $tmp = from_json( $json->{xml}, { allow_nonref => 1 } );
$json->{$_} = $tmp->{$_} foreach ( keys %$tmp );
delete $json->{xml};
};
if ($@) {
$self->logger->error("Malformed notification $@");
return $self->sendError( $req, "Malformed notification: $@", 200 );
}
$newNotif = to_json($json);
}
unless ( eval { $self->notifAccess->newNotification($newNotif) } ) {
$self->logger->error("Notification not created: $@");
return $self->sendError( $req, "Notification not created: $@", 200 );
}
else {
return $self->sendJSONresponse( $req, { result => 1 } );
}
}
sub updateNotification {
my ( $self, $req ) = @_;
my $json = $req->jsonBodyToObj;
unless ( defined($json) ) {
return $self->sendError( $req, undef, 200 );
}
# For now, only "mark as done" is proposed
unless ( $json->{done} ) {
return $self->sendError( $req, 'Only "done=1" is accepted for now',
200 );
}
my $id = $req->params('notificationId') or die;
my ( $uid, $ref ) = ( $id =~ /([^_]+?)_(.+)/ );
my ( $n, $res );
unless ( $n = $self->notifAccess->get( $uid, $ref ) ) {
$self->logger->notice("Notification $ref not found for user $uid");
return $self->sendError( $req,
"Notification $ref not found for user $uid" );
}
# Delete notifications
my $status = 1;
foreach ( keys %$n ) {
$status = 0 unless ( $self->notifAccess->delete($_) );
}
unless ($status) {
$self->logger->error("Notification $ref for user $uid not deleted");
return $self->sendError( $req,
"Notification $ref for user $uid not deleted" );
}
else {
$self->logger->info("Notification $ref deleted for user $uid");
return $self->sendJSONresponse( $req, { result => 1 } );
}
}
sub deleteDoneNotification {
my ( $self, $req ) = @_;
my $res;
# Purge notification
my $id = $req->params('notificationId') or die;
my ( $uid, $ref, $date ) = ( $id =~ /([^_]+?)_([^_]+?)_(.+)/ );
my $identifier = $self->notifAccess->getIdentifier( $uid, $ref, $date );
unless ( eval { $self->notifAccess->purge($identifier) } ) {
$self->logger->warn("Notification $identifier not purged ($@)");
return $self->sendError( $req,
"Notification $identifier not purged ($@)", 400 );
}
$self->logger->info("Notification $identifier purged");
return $self->sendJSONresponse( $req, { result => 1 } );
}
1;
( run in 1.261 second using v1.01-cache-2.11-cpan-39bf76dae61 )