Elive::Entity::ServerParameters - Meeting server parameters entity class


Elive documentation Contained in the Elive distribution.

Index


Code Index:

NAME

Top

Elive::Entity::ServerParameters - Meeting server parameters entity class

SYNOPSIS

Top

    my $meeting = Elive::Entity::Meeting->insert( \%meeting_data );
    my $server_params $meeting->server_parameters;

    $server_params->update({
           boundaryMinutes => 15,
           fullPermissions => 0,
           supervised      => 1,
           enableTelephony => 0,
           seats => 18,
     });

DESCRIPTION

Top

The server parameters entity contains additional meeting options.

METHODS

Top

insert

The insert method is not applicable. The meeting server parameters entity is automatically created when you create a meeting.

delete

The delete method is not applicable. meeting server parameters are deleted when the meeting itself is deleted.

list

The list method is not available for meeting parameters. You'll need to create a meeting, then retrieve on meeting id

update

    my $server_parameters
         = Elive::Entity::ServerParameters->fetch([$meeting_id]);

    $server_parameters->update({
	    boundaryMinutes => 15,
	    fullPermissions => 1,
	    supervised => 1,
        });

Updates the meeting boundary times, permissions and whether the meeting is supervised.

See Also

Top

Elive::Entity::Meeting Elive::Entity::MeetingParameters


Elive documentation Contained in the Elive distribution.
package Elive::Entity::ServerParameters;
use warnings; use strict;

use Mouse;
use Mouse::Util::TypeConstraints;

extends 'Elive::Entity';

__PACKAGE__->entity_name('ServerParameters');
__PACKAGE__->_isa('Meeting');

coerce 'Elive::Entity::ServerParameters' => from 'HashRef'
          => via {Elive::Entity::ServerParameters->new($_) };

has 'meetingId' => (is => 'rw', isa => 'Int', required => 1,
    documentation => 'associated meeting');
__PACKAGE__->primary_key('meetingId');

has 'seats' => (is => 'rw', isa => 'Int',
    documentation => 'Number of available seats');
__PACKAGE__->_alias(requiredSeats => 'seats');

has 'boundaryMinutes' => (is => 'rw', isa => 'Int',
    documentation => 'meeting boundary time (minutes)');
__PACKAGE__->_alias(boundary => 'boundaryMinutes', freeze => 1);
__PACKAGE__->_alias(boundaryTime => 'boundaryMinutes'); # v 9.5.0 +

has 'fullPermissions' => (is => 'rw', isa => 'Bool', required => 1,
    documentation => 'whether participants can perform activities (e.g. use whiteboard) before the supervisor arrives');
__PACKAGE__->_alias(permissionsOn => 'fullPermissions', freeze => 1);
__PACKAGE__->_alias(permissions => 'fullPermissions');

has 'supervised' => (is => 'rw', isa => 'Bool',
    documentation => 'whether the moderator can see private messages');

has 'enableTelephony'
    => (is => 'rw', isa => 'Bool',
	documentation => 'Enable Telephony');

has 'telephonyType'
    => (is => 'rw', isa => 'Str',
			documentation => 'Can be either SIP/PHONE.' );

has 'moderatorTelephonyAddress'
    => (is => 'rw', isa => 'Str',
	documentation => 'Either a PHONE number or SIP address for the moderator for telephone');

has 'moderatorTelephonyPIN'
    => (is => 'rw', isa => 'Str',
	documentation => 'PIN for moderator telephony');

has 'participantTelephonyAddress'
    => (is => 'rw', isa => 'Str',
	documentation => 'Either a PHONE number or SIP address for the participants for telephone');

has 'participantTelephonyPIN'
    => (is => 'rw', isa => 'Str',
	documentation => 'PIN for participants telephony');

has 'serverTelephonyAddress'
    => (is => 'rw', isa => 'Str',
	documentation => 'Either a PHONE number or SIP address for the server');

has 'serverTelephonyPIN'
    => (is => 'rw', isa => 'Str',
	documentation => 'PIN for the server');

has 'serverTelephonyAddress'
    => (is => 'rw', isa => 'Str',
	documentation => 'Either a PHONE number or SIP address for the server');

has 'redirectURL' => (is => 'rw', isa => 'Str',
		      documentation => 'URL to redirect users to after the online session is over.');

sub insert {return shift->_not_available}

sub delete {return shift->_not_available}

sub list {return shift->_not_available}

sub update {
    my ($self, $update_data, %opt) = @_;

    $self->set( %$update_data)
	if (keys %$update_data);
    #
    # Command Toolkit seems to require a setting for fullPermissions (aka
    # permissionsOn); always pass it through.
    #
    my @required = qw/boundaryMinutes fullPermissions supervised/;
    my %changed;
    @changed{@required, $self->is_changed} = undef;

    foreach (@required) {
	die "missing required property: $_"
	    unless defined $self->{$_};
    }

    #
    # direct changes to seats are ignored. This needs to be intercepted
    # and routed to the updateMeeting command.
    #
    if (exists $changed{seats}) {
	delete $changed{seats};

	my $meeting_params = Elive::Entity::Meeting->_freeze({
	    meetingId => $self,
	    seats => $self->seats,
	});

	my $connection = $opt{connection} || $self->connection;

	my $som = $connection->call(updateMeeting => %$meeting_params);
	$connection->_check_for_errors($som);
    }
    #
    # This adapter barfs if we don't write values back, whether they've
    # changed or not.
    #
    return $self->SUPER::update(undef, %opt, changed => [sort keys %changed]);
}

#
# elm 3.x may throw back a complex type for telephonyType, something like:
# {Name: 'PHONE', Ordinal: 1, TelephonyType: 1}. Dereference this, when it
# happens, to obtain the underlying database value 'PHONE'.
#

sub _thaw {
    my ($class, $db_data, @args) = @_;
    my $thawed = $class->SUPER::_thaw($db_data, @args);

    my $telephonyType = $thawed->{telephonyType};
    if (Elive::Util::_reftype($telephonyType) eq 'HASH'
	&& (my $name = $telephonyType->{Name})) {
	$thawed->{telephonyType} = $name;
    }

    return $thawed;
}

1;