EWS-Client
view release on metacpan or search on metacpan
lib/EWS/Calendar/Item.pm view on Meta::CPAN
isa => 'Int', # bool
required => 1,
);
has IsAllDayEvent => (
is => 'ro',
isa => 'Int', # bool
required => 0,
default => 0,
);
has Sensitivity => (
is => 'ro',
isa => enum([qw/Normal Personal Private Confidential/]),
required => 1,
);
has RequiredAttendees => (
is => 'ro',
isa => 'ArrayRef[EWS::Calendar::Mailbox]',
required => 0,
);
has Duration => (
is => 'ro',
isa => 'Str',
required => 1,
);
has OptionalAttendees => (
is => 'ro',
isa => 'ArrayRef[EWS::Calendar::Mailbox]',
required => 0,
);
has UID => (
is => 'ro',
isa => 'Str',
required => 0,
default => '',
);
sub BUILDARGS {
my ($class, @rest) = @_;
my $params = (scalar @rest == 1 ? $rest[0] : {@rest});
# could coerce but this is always required, so do it here instead
$params->{'Start'} = DateTime::Format::ISO8601->parse_datetime($params->{'Start'});
$params->{'End'} = DateTime::Format::ISO8601->parse_datetime($params->{'End'});
# fish data out of deep structure
$params->{'Organizer'} = EWS::Calendar::Mailbox->new($params->{'Organizer'}->{'Mailbox'});
$params->{'OptionalAttendees'} = [ map { EWS::Calendar::Mailbox->new($_->{'Mailbox'}) }
@{$params->{'OptionalAttendees'}->{Attendee}} ];
$params->{'RequiredAttendees'} = [ map { EWS::Calendar::Mailbox->new($_->{'Mailbox'}) }
@{$params->{'RequiredAttendees'}->{Attendee}} ];
$params->{'Body'} = $params->{'Body'}->{'_'};
# rework semicolon separated list into array, and also remove Organizer
$params->{'DisplayTo'} = [ grep {$_ ne $params->{'Organizer'}->{'Name'}}
split m/; /, $params->{'DisplayTo'} ];
# set Perl's encoding flag on all data coming from Exchange
# also strip HTML tags from incoming data
my $hs = HTML::Strip->new(emit_spaces => 0);
foreach my $key (keys %$params) {
if ( $key =~ /RequiredAttendees|OptionalAttendees|IsDraft|IsAllDayEvent/ ) {
next;
}
elsif (ref $params->{$key} eq 'ARRAY') {
$params->{$key} = [
map {$hs->parse($_)}
map {Encode::encode('utf8', $_)}
@{ $params->{$key} }
];
}
elsif (ref $params->{$key}) {
next;
}
else {
$params->{$key} = $hs->parse(Encode::encode('utf8', $params->{$key}));
}
}
# the Body is usually a mess if created by Outlook
$params->{'Body'} =~ s/^\s+//;
$params->{'Body'} =~ s/\s+$//;
$params->{'Body'} =~ s/\n{3,}/\n\n/g;
$params->{'Body'} =~ s/ {2,}/ /g;
return $params;
}
__PACKAGE__->meta->make_immutable;
no Moose;
1;
( run in 0.673 second using v1.01-cache-2.11-cpan-71847e10f99 )