1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
use warnings;
use strict;
package Data::ICal::Entry::Event;
use base qw/Data::ICal::Entry/;
=head1 NAME
Data::ICal::Entry::Event - Represents an event in an iCalendar file
=head1 SYNOPSIS
my $vevent = Data::ICal::Entry::Event->new();
$vevent->add_properties(
summary => "my party",
description => "I'll cry if I want to",
# Dat*e*::ICal is not a typo here
dtstart => Date::ICal->new( epoch => time )->ical,
);
$calendar->add_entry($vevent);
$vevent->add_entry($alarm);
=head1 DESCRIPTION
A L<Data::ICal::Entry::Event> object represents a single event in an
iCalendar file. (Note that the iCalendar RFC refers to entries as
"components".) It is a subclass of L<Data::ICal::Entry> and accepts
all of its methods.
=head1 METHODS
=cut
=head2 ical_entry_type
Returns C<VEVENT>, its iCalendar entry name.
=cut
sub ical_entry_type {'VEVENT'}
=head2 mandatory_unique_properties
The C<uid> property is mandatory if C<rfc_strict> was passed to
L<Data::ICal/new>.
=cut
sub mandatory_unique_properties {
my $self = shift;
return $self->rfc_strict ? ("uid") : ()
}
=head2 optional_unique_properties
According to the iCalendar standard, the following properties may be
specified at most one time for an event:
class created description dtstart geo
last-modified location organizer priority
dtstamp sequence status summary transp
uid url recurrence-id
In addition, C<dtend> and C<duration> may be specified at most once
each, but not both in the same entry (though this restriction is not
enforced).
Or if C<< vcal10 => 1 >>:
class dcreated completed description dtstart dtend
last-modified location rnum priority
sequence status summary transp
url uid
=cut
sub optional_unique_properties {
my $self = shift;
my @ret = $self->rfc_strict ? () : ("uid");
if (not $self->vcal10) {
push @ret, qw(
class created description dtstart geo
last-modified location organizer priority
dtstamp sequence status summary transp
url recurrence-id
dtend duration
);
} else {
push @ret, qw(
class dcreated completed description dtstart dtend
last-modified location rnum priority
sequence status summary transp
url
);
}
return @ret;
}
=head2 optional_repeatable_properties
According to the iCalendar standard, the following properties may be
specified any number of times for an event:
attach attendee categories comment
contact exdate exrule request-status related-to
resources rdate rrule
Or if C<< vcal10 => 1 >>:
aalarm attach attendee categories
dalarm exdate exrule malarm palarm related-to
resources rdate rrule
=cut
sub optional_repeatable_properties {
my $self = shift;
if (not $self->vcal10) {
qw(
attach attendee categories comment
contact exdate exrule request-status related-to
resources rdate rrule
);
} else {
qw(
aalarm attach attendee categories
dalarm exdate exrule malarm palarm related-to
resources rdate rrule
);
}
}
=head1 SEE ALSO
=over 4
=item L<Data::ICal::DateTime>
For date parsing and formatting, including denoting "all day" events,
considering using this module. Because it's a "mix in", you can still
use all the methods here as well as the new date handling methods it
defines.
=back
=head1 AUTHOR
Best Practical Solutions, LLC E<lt>modules@bestpractical.comE<gt>
=head1 LICENCE AND COPYRIGHT
Copyright (c) 2005 - 2020, Best Practical Solutions, LLC. All rights reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L<perlartistic>.
=cut
1;
|