Elive
view release on metacpan or search on metacpan
lib/Elive/View/Session.pm view on Meta::CPAN
=cut
sub insert {
my $class = shift;
my %data = %{ shift() };
my %opts = @_;
my $preloads = delete $data{add_preload};
#
# start by inserting the meeting
#
my @meeting_props = $class->_data_owned_by('Elive::Entity::Meeting' => (sort keys %data));
my %meeting_data = map {
$_ => delete $data{$_}
} @meeting_props;
#
# recurrenceCount, and recurrenceDays may result in multiple meetings
#
my @meetings = Elive::Entity::Meeting->insert(\%meeting_data, %opts);
my @objs = map {
my $meeting = $_;
my $self = Elive::Entity::Session->new( {id => $meeting->meetingId,
meeting => $meeting} );
bless $self, $class;
$self->connection( $meeting->connection );
#
# from here on in, it's just a matter of updating attributes owned by
# the other entities. We need to do this for each meeting instance
#
$self->update(\%data, %opts)
if keys %data;
$self->__add_preloads( $preloads ) if $preloads;
$self;
} @meetings;
return wantarray? @objs : $objs[0];
}
=head2 update
Updates a previously created session.
$session->seats(5);
$session->update;
...or equivalently...
$session->update({seats => 5});
=cut
sub update {
my $self = shift;
my %data = %{ shift() || {} };
my %opts = @_;
my $preloads = delete $data{add_preload};
my $delegates = $self->_delegates;
foreach my $delegate (sort keys %$delegates) {
my $delegate_class = $delegates->{$delegate};
my @delegate_props = $self->_data_owned_by($delegate_class => sort keys %data);
next unless @delegate_props
|| ($self->{$delegate} && $self->{$delegate}->is_changed);
my %delegate_data = map {$_ => delete $data{$_}} @delegate_props;
$self->$delegate->update( \%delegate_data, %opts );
}
$self->__add_preloads( $preloads ) if $preloads;
return $self;
}
sub __add_preloads {
my $self = shift;
my $preloads = shift;
if ($preloads) {
$preloads = Elive::Entity::Preloads->_build_array( $preloads );
foreach my $preload (@$preloads) {
$self->meeting->add_preload( $preload );
}
}
}
=head2 list retrieve buildJNLP check_preload add_preload remove_preload is_participant is_moderator list_preloads list_recordings
These methods are available from the base class L<Elive::Entity::Session>.
=head2 adapter allModerators boundaryMinutes costCenter deleted enableTelephony end facilitatorId followModerator fullPermissions id inSessionInvitation maxTalkers moderatorNotes moderatorTelephonyAddress moderatorTelephonyPIN name participantTelepho...
These attributes are available from the base class L<Elive::Entity::Session>.
=cut
sub properties {
my $class = shift;
my %seen = (meetingId => 1);
my $delegates = $class->_delegates;
my @delegate_properties = sort grep {! $seen{$_}++} (
'id',
map {$_->properties} sort values %$delegates,
);
return @delegate_properties;
}
( run in 0.928 second using v1.01-cache-2.11-cpan-d8267643d1d )