lemonldap-ng/lemonldap-ng-common/lib/Lemonldap/NG/Common/Notifications.pm

79 lines
1.9 KiB
Perl

package Lemonldap::NG::Common::Notifications;
use strict;
use Mouse;
use JSON qw(to_json);
our $VERSION = '2.1.0';
extends 'Lemonldap::NG::Common::Module';
sub import {
if ( $_[1] eq 'XML' ) {
extends 'Lemonldap::NG::Common::Notifications::XML',
'Lemonldap::NG::Common::Module';
}
else {
extends 'Lemonldap::NG::Common::Notifications::JSON',
'Lemonldap::NG::Common::Module';
}
}
has extension => (
is => 'rw',
default => 'json'
);
has notifField => (
is => 'rw',
builder => sub {
my $uid =
$_[0]->conf->{notificationField}
|| $_[0]->conf->{whatToTrace}
|| 'uid';
$uid =~ s/^\$//;
return $uid;
}
);
sub BUILD {
my $self = shift;
$self->extension('xml') if $self->conf->{oldNotifFormat};
$self->logger->debug( 'Use extension "'
. $self->extension
. '" to store notification files' );
}
sub getNotifications {
my ( $self, $uid ) = @_;
my $forAll = $self->get( $self->conf->{notificationWildcard} );
if ( $uid and $uid =~ /^_all(Pending|Existing)_$/ ) {
$self->logger->info("Retrieve all $1 notifications");
my $all = ( $1 eq 'Pending' ? $self->getAll() : $self->getExisting() );
$all = { map { $_ => to_json( $all->{$_} ) } keys %$all };
return ( $forAll ? { %$all, %$forAll } : $all );
}
my $forUser = $self->get($uid);
if ( $forUser and $forAll ) {
return { %$forUser, %$forAll };
}
else {
return ( ( $forUser ? $forUser : $forAll ), $forUser );
}
}
sub getAcceptedNotifs {
my ( $self, $uid, $ref ) = @_;
my $forAll =
$self->getAccepted( $self->conf->{notificationWildcard}, $ref );
my $forUser = $self->getAccepted( $uid, $ref );
if ( $forUser and $forAll ) {
return { %$forUser, %$forAll };
}
else {
return ( ( $forUser ? $forUser : $forAll ), $forUser );
}
}
1;