Chamilo is a learning management system focused on ease of use and accessibility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
chamilo-lms/plugin/openmeetings/lib/openmeetings_gateway.php

491 lines
16 KiB

<?php
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License") + you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/**
* @package chamilo.plugin.openmeetings
*/
/**
* Init.
*/
require_once 'openmeetings_rest_service.php';
/**
* Class OpenMeetingsGateway.
*/
class OpenMeetingsGateway
{
public $sessionId = "";
public $config;
private $rest;
private $_user;
private $_pass;
private $_url;
public function __construct($host, $user, $pass)
{
$this->_user = urlencode($user);
$this->_pass = urlencode($pass);
$this->_url = $host;
if (substr($this->_url, -1, 1) == '/') {
$this->_url = substr($this->_url, 0, -1);
}
$this->rest = new OpenMeetingsRestService();
$err = $this->rest->getError();
if ($err) {
error_log('Constructor error: '.$err);
error_log('Debug: '.$this->rest->getDebug());
exit();
}
}
/**
* @param string $name
*
* @return string
*/
public function getRestUrl($name)
{
return $this->getUrl()."/services/".$name."/";
}
/**
* @return string
*/
public function getUrl()
{
return $this->_url;
}
/**
* @param bool $in
*
* @return string
*/
public function var_to_str($in)
{
if (is_bool($in)) {
return $in ? "true" : "false";
} else {
return $in;
}
}
/**
* TODO: Get Error Service and show detailed Error Message.
*/
public function loginUser()
{
$returnValue = 0;
$response = $this->rest->call($this->getRestUrl("UserService")."getSession", "session_id");
if ($this->rest->getError()) {
error_log('Fault (Expect - The request contains an invalid SOAP body) '.print_r($response, 1));
} else {
$err = $this->rest->getError();
if ($err) {
error_log('Error: '.$err);
} else {
$this->sessionId = $response;
$url = $this->getRestUrl("UserService")
."loginUser?"
."SID=".$this->sessionId
."&username=".$this->_user
."&userpass=".$this->_pass;
$result = $this->rest->call($url);
if ($this->rest->getError()) {
error_log('Fault (Expect - The request contains an invalid SOAP body) '.print_r($result, 1));
} else {
$err = $this->rest->getError();
if ($err) {
error_log('Error '.$err);
} else {
$returnValue = $result;
}
}
}
}
if ($returnValue > 0) {
return true;
} else {
return false;
}
}
/**
* @param Room $room
*
* @return array|bool|int|null
*/
public function updateRoomWithModeration($room)
{
$err = $this->rest->getError();
if ($err) {
error_log('Constructor error: '.$err);
error_log('Debug: '.$this->rest->getDebug());
exit();
}
$isModeratedRoom = false;
if ($room->isModeratedRoom == 1) {
$isModeratedRoom = true;
}
$url = $this->getRestUrl($this->getRestUrl("RoomService")
."updateRoomWithModeration?SID=".$this->sessionId
."&room_id=".$room->room_id
."&name=".urlencode($room->name)
."&roomtypes_id=".$room->roomtypes_id
."&comment=".$room->comment
."&numberOfPartizipants=".$room->numberOfPartizipants
."&ispublic=false"
."&appointment=false"
."&isDemoRoom=false"
."&demoTime=0"
."&isModeratedRoom=".$this->var_to_str($isModeratedRoom));
$result = $this->rest->call($url);
if ($result->fault) {
error_log('Fault (Expect - The request contains an invalid SOAP body) '.print_r($result, 1));
} else {
$err = $this->rest->getError();
if ($err) {
error_log('Error: '.$err);
} else {
return $result;
}
}
return -1;
}
/**
* @param $username
* @param $firstname
* @param $lastname
* @param $userId
* @param $systemType
* @param $recording_id
*
* @return array|bool|int|null
*/
public function setUserObjectAndGenerateRecordingHashByURL($username, $firstname, $lastname, $userId, $systemType, $recording_id)
{
$result = $this->rest->call($this->getRestUrl("UserService")
.'setUserObjectAndGenerateRecordingHashByURL?'
.'SID='.$this->sessionId
.'&username='.urlencode($username)
.'&firstname='.urlencode($firstname)
.'&lastname='.urlencode($lastname)
.'&externalUserId='.$userId
.'&externalUserType='.urlencode($systemType)
.'&recording_id='.$recording_id, 'return');
if ($result->fault) {
error_log('Fault (Expect - The request contains an invalid SOAP body) '.print_r($result, 1));
} else {
$err = $this->rest->getError();
if ($err) {
error_log('Error: '.$err);
} else {
return $result;
}
}
return -1;
}
/**
* @param $username
* @param $firstname
* @param $lastname
* @param $profilePictureUrl
* @param $email
* @param $userId
* @param $systemType
* @param $room_id
* @param $becomeModerator
* @param $allowRecording
*
* @return array|bool|int|null
*/
public function setUserObjectAndGenerateRoomHashByURLAndRecFlag($username, $firstname, $lastname, $profilePictureUrl, $email, $userId, $systemType, $room_id, $becomeModerator, $allowRecording)
{
$err = $this->rest->getError();
if ($err) {
error_log('Constructor error: '.$err);
error_log('Debug: '.$this->rest->getDebug());
exit();
}
$result = $this->rest->call($this->getRestUrl("UserService")
."setUserObjectAndGenerateRoomHashByURLAndRecFlag?"
."SID=".$this->sessionId
."&username=".urlencode($username)
."&firstname=".urlencode($firstname)
."&lastname=".urlencode($lastname)
."&profilePictureUrl=".urlencode($profilePictureUrl)
."&email=".urlencode($email)
."&externalUserId=".urlencode($userId)
."&externalUserType=".urlencode($systemType)
."&room_id=".urlencode($room_id)
."&becomeModeratorAsInt=".$becomeModerator
."&showAudioVideoTestAsInt=1"
."&allowRecording=".$this->var_to_str($allowRecording));
if ($result->fault) {
error_log('Fault (Expect - The request contains an invalid SOAP body) '.print_r($result, 1));
} else {
$err = $this->rest->getError();
if ($err) {
error_log('Error: '.$err);
} else {
// echo '<h2>Result</h2><pre>'; print_r($result["return"]); echo '</pre>';
return $result;
}
}
return -1;
}
/**
* @param Room $openmeetings
*
* @return array|bool|int|null
*/
public function deleteRoom($openmeetings)
{
$err = $this->rest->getError();
if ($err) {
error_log('Constructor error: '.$err);
error_log('Debug: '.$this->rest->getDebug());
exit();
}
$url = $this->getRestUrl("RoomService")."deleteRoom?SID=".$this->sessionId."&rooms_id=".$openmeetings->room_id;
$result = $this->rest->call($url);
if ($result->fault) {
error_log('Fault (Expect - The request contains an invalid SOAP body) '.print_r($result, 1));
} else {
$err = $this->rest->getError();
if ($err) {
error_log('Error: '.$err);
} else {
// echo '<h2>Result</h2><pre>'; print_r($result["return"]); echo '</pre>';
// return $result["return"];
return $result;
}
}
return -1;
}
/**
* Generate a new room hash for entering a conference room.
*/
public function setUserObjectAndGenerateRoomHash($username, $firstname, $lastname, $profilePictureUrl, $email, $externalUserId, $externalUserType, $room_id, $becomeModeratorAsInt, $showAudioVideoTestAsInt)
{
$result = $this->rest->call($this->getRestUrl("UserService")
."setUserObjectAndGenerateRoomHash?"
."SID=".$this->sessionId
."&username=".urlencode($username)
."&firstname=".urlencode($firstname)
."&lastname=".urlencode($lastname)
."&profilePictureUrl=".urlencode($profilePictureUrl)
."&email=".urlencode($email)
."&externalUserId=".urlencode($externalUserId)
."&externalUserType=".urlencode($externalUserType)
."&room_id=".$room_id
."&becomeModeratorAsInt=".$becomeModeratorAsInt
."&showAudioVideoTestAsInt=".$showAudioVideoTestAsInt);
if ($result->getError()) {
error_log('Fault (Expect - The request contains an invalid SOAP body) '.print_r($result, 1));
} else {
$err = $this->rest->getError();
if ($err) {
error_log('Error: '.$err);
} else {
// echo '<h2>Result</h2><pre>'; print_r($result["return"]); echo '</pre>';
return $result;
}
}
return -1;
}
/**
* Create a new conference room.
*
* @param Room The room object
*
* @return The REST call's result
*/
public function createRoomWithModAndType($room)
{
$service = 'addRoomWithModerationAndExternalType';
if ($room->allowRecording) {
$service = 'addRoomWithModerationAndRecordingFlags';
} elseif ($room->isAudioOnly) {
$service = 'addRoomWithModerationExternalTypeAndAudioType';
}
$url = $this->getRestUrl("RoomService")
.$service.'?'
.'SID='.$room->SID
.'&name='.$room->name
.'&roomtypes_id='.$room->roomtypes_id
.'&comment='.$room->comment
.'&numberOfPartizipants='.$room->numberOfPartizipants
.'&ispublic='.$this->var_to_str($room->ispublic)
.'&appointment='.$this->var_to_str($room->appointment)
.'&isDemoRoom='.$this->var_to_str($room->isDemoRoom)
.'&demoTime='.$room->demoTime
.'&isModeratedRoom='.$this->var_to_str($room->isModeratedRoom)
.'&externalRoomType='.$room->externalRoomType;
if ($room->allowRecording) {
$url .= '&allowUserQuestions='.$this->var_to_str($room->allowUserQuestions)
.'&isAudioOnly='.$this->var_to_str($room->isAudioOnly)
.'&waitForRecording='.$this->var_to_str($room->waitForRecording)
.'&allowRecording='.$this->var_to_str($room->allowRecording);
} elseif ($room->isAudioOnly) {
$url .= '&isAudioOnly='.$this->var_to_str($room->isAudioOnly);
}
$result = $this->rest->call($url);
if ($this->rest->fault) {
error_log('Fault (Expect - The request contains an invalid SOAP body) '.print_r($result, 1));
} else {
$err = $this->rest->getError();
if ($err) {
error_log('Error: '.$err);
} else {
return $result;
}
}
return -1;
}
/**
* Gets the list of open rooms of type "Chamilo".
*
* @param string $type The type of external system connecting to OpenMeetings
*
* @return bool
*/
public function getRoomsWithCurrentUsersByType($type = 'chamilolms')
{
//$this->loginUser();
if (empty($this->sessionId)) {
return false;
}
$url = $this->getRestUrl("RoomService")."getRoomsWithCurrentUsersByListAndType?SID=".$this->sessionId
."&start=1&max=1000&orderby=name&asc=true&externalRoomType=chamilolms";
//$url = $this->getRestUrl("RoomService")
// . "getRoomTypes?"
// . "SID=" . $this->sessionId;
//$url = $this->getRestUrl('JabberService') . 'getAvailableRooms?SID=' . $this->sessionId;
$result = $this->rest->call($url, "return");
$rooms = [];
foreach ($result as $room) {
if ($room['externalRoomType'] == $type && count($room['currentusers']) > 0) {
$rooms[] = $room;
}
}
return $result;
}
/**
* Gets details of a remote room by room ID.
*
* @param int $roomId The ID of the room, as of plugin_openmeetings.room_id
*
* @return mixed Room object
*/
public function getRoomById($roomId = 0)
{
//$this->loginUser();
if (empty($this->sessionId) or empty($roomId)) {
return false;
}
$roomId = intval($roomId);
$url = $this->getRestUrl("RoomService")
."getRoomById?"
."SID=".$this->sessionId
."&rooms_id=".$roomId;
$result = $this->rest->call($url, "return");
return $result;
}
/**
* Get list of available recordings made by this instance.
*/
public function getRecordingsByExternalRooms()
{
$url = $this->getRestUrl("RoomService")
."getFlvRecordingByExternalRoomType?"
."SID=".$this->sessionId
."&externalRoomType=".urlencode($this->config["moduleKey"]);
$result = $this->rest->call($url, "return");
return $result;
}
/**
* Get the recording from the room.
*
* @param int $id Room ID
*
* @return array
*/
public function getFlvRecordingByRoomId($id)
{
$url = $this->getRestUrl("RoomService")
."getFlvRecordingByRoomId?"
."SID=".$this->sessionId
."&roomId=".urlencode($id);
$result = $this->rest->call($url, "return");
return $result;
}
/**
* Get list of available recordings made by user.
*/
public function getRecordingsByExternalUser($id)
{
$url = $this->getRestUrl("RoomService")
."getFlvRecordingByExternalUserId?"
."SID=".$this->sessionId
."&externalUserId=".$id;
$result = $this->rest->call($url, "return");
return $result;
}
}