123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667 |
- <?php
- class BigBlueButtonBN
- {
- private $_securitySalt;
- private $_bbbServerBaseUrl;
- public function __construct()
- {
-
-
-
- $this->_securitySalt = CONFIG_SECURITY_SALT;
- $this->_bbbServerBaseUrl = CONFIG_SERVER_BASE_URL;
- }
- private function _processXmlResponse($url)
- {
-
- if (extension_loaded('curl')) {
- $ch = curl_init() or die ( curl_error($ch) );
- $timeout = 10;
- curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt( $ch, CURLOPT_URL, $url );
- curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
- curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout);
- $data = curl_exec( $ch );
- curl_close( $ch );
- if($data)
- return (new SimpleXMLElement($data));
- else
- return false;
- }
- return (simplexml_load_file($url));
- }
- private function _requiredParam($param) {
-
- if ((isset($param)) && ($param != '')) {
- return $param;
- }
- elseif (!isset($param)) {
- throw new Exception('Missing parameter.');
- }
- else {
- throw new Exception(''.$param.' is required.');
- }
- }
- private function _optionalParam($param) {
-
-
- if ((isset($param)) && ($param != '')) {
- return $param;
- }
- else {
- $param = '';
- return $param;
- }
- }
-
-
- public function getCreateMeetingUrl($creationParams) {
-
- $this->_meetingId = $this->_requiredParam($creationParams['meetingId']);
- $this->_meetingName = $this->_requiredParam($creationParams['meetingName']);
-
- $creationUrl = $this->_bbbServerBaseUrl."api/create?";
-
- $params =
- 'name='.urlencode($this->_meetingName).
- '&meetingID='.urlencode($this->_meetingId).
- '&attendeePW='.urlencode($creationParams['attendeePw']).
- '&moderatorPW='.urlencode($creationParams['moderatorPw']).
- '&dialNumber='.urlencode($creationParams['dialNumber']).
- '&voiceBridge='.urlencode($creationParams['voiceBridge']).
- '&webVoice='.urlencode($creationParams['webVoice']).
- '&logoutURL='.urlencode($creationParams['logoutUrl']).
- '&maxParticipants='.urlencode($creationParams['maxParticipants']).
- '&record='.urlencode($creationParams['record']).
- '&duration='.urlencode($creationParams['duration']);
-
- $welcomeMessage = $creationParams['welcomeMsg'];
- if(trim($welcomeMessage))
- $params .= '&welcome='.urlencode($welcomeMessage);
-
- return ( $creationUrl.$params.'&checksum='.sha1("create".$params.$this->_securitySalt) );
- }
- public function createMeetingWithXmlResponseArray($creationParams)
- {
-
- $xml = $this->_processXmlResponse($this->getCreateMeetingURL($creationParams));
- if ($xml) {
- if ($xml->meetingID) {
- return array(
- 'returncode' => $xml->returncode->__toString(),
- 'message' => $xml->message->__toString(),
- 'messageKey' => $xml->messageKey->__toString(),
- 'meetingId' => $xml->meetingID->__toString(),
- 'attendeePw' => $xml->attendeePW->__toString(),
- 'moderatorPw' => $xml->moderatorPW->__toString(),
- 'hasBeenForciblyEnded' => $xml->hasBeenForciblyEnded->__toString(),
- 'createTime' => $xml->createTime->__toString(),
- 'internalMeetingID' => $xml->internalMeetingID->__toString()
- );
- } else {
- return array(
- 'returncode' => $xml->returncode->__toString(),
- 'message' => $xml->message->__toString(),
- 'messageKey' => $xml->messageKey->__toString(),
- );
- }
- } else {
- return null;
- }
- }
- public function getJoinMeetingURL($joinParams) {
-
- $this->_meetingId = $this->_requiredParam($joinParams['meetingId']);
- $this->_username = $this->_requiredParam($joinParams['username']);
- $this->_password = $this->_requiredParam($joinParams['password']);
-
- $joinUrl = $this->_bbbServerBaseUrl."api/join?";
-
- $params =
- 'meetingID='.urlencode($this->_meetingId).
- '&fullName='.urlencode($this->_username).
- '&password='.urlencode($this->_password).
- '&userID='.urlencode($joinParams['userID']).
- '&webVoiceConf='.urlencode($joinParams['webVoiceConf']);
-
- if (((isset($joinParams['createTime'])) && ($joinParams['createTime'] != ''))) {
- $params .= '&createTime='.urlencode($joinParams['createTime']);
- }
- if (isset($joinParams['interface']) && (int) $joinParams['interface'] === BBBPlugin::INTERFACE_HTML5) {
- $bbbHost = api_remove_trailing_slash(CONFIG_SERVER_URL_WITH_PROTOCOL);
- $params .= '&redirectClient=true&clientURL='.$bbbHost.'/html5client/join';
- }
-
- $url = $joinUrl.$params.'&checksum='.sha1('join'.$params.$this->_securitySalt);
- return $url;
- }
- public function getEndMeetingURL($endParams) {
-
- $this->_meetingId = $this->_requiredParam($endParams['meetingId']);
- $this->_password = $this->_requiredParam($endParams['password']);
- $endUrl = $this->_bbbServerBaseUrl."api/end?";
- $params =
- 'meetingID='.urlencode($this->_meetingId).
- '&password='.urlencode($this->_password);
- return ($endUrl.$params.'&checksum='.sha1("end".$params.$this->_securitySalt));
- }
- public function endMeetingWithXmlResponseArray($endParams) {
-
- $xml = $this->_processXmlResponse($this->getEndMeetingURL($endParams));
- if ($xml) {
- return array(
- 'returncode' => $xml->returncode->__toString(),
- 'message' => $xml->message->__toString(),
- 'messageKey' => $xml->messageKey->__toString()
- );
- }
- else {
- return null;
- }
- }
-
-
- public function getIsMeetingRunningUrl($meetingId) {
-
- $this->_meetingId = $this->_requiredParam($meetingId);
- $runningUrl = $this->_bbbServerBaseUrl."api/isMeetingRunning?";
- $params =
- 'meetingID='.urlencode($this->_meetingId);
- return ($runningUrl.$params.'&checksum='.sha1("isMeetingRunning".$params.$this->_securitySalt));
- }
- public function isMeetingRunningWithXmlResponseArray($meetingId) {
-
- $xml = $this->_processXmlResponse($this->getIsMeetingRunningUrl($meetingId));
- if($xml) {
- return array(
- 'returncode' => $xml->returncode->__toString(),
- 'running' => $xml->running->__toString()
- );
- }
- else {
- return null;
- }
- }
- public function getGetMeetingsUrl() {
-
- $getMeetingsUrl = $this->_bbbServerBaseUrl."api/getMeetings?checksum=".sha1("getMeetings".$this->_securitySalt);
- return $getMeetingsUrl;
- }
- public function getMeetingsWithXmlResponseArray() {
-
- $xml = $this->_processXmlResponse($this->getGetMeetingsUrl());
- if($xml) {
-
- if ($xml->returncode != 'SUCCESS') {
- $result = array(
- 'returncode' => $xml->returncode->__toString()
- );
- return $result;
- }
- elseif ($xml->messageKey == 'noMeetings') {
-
- $result = array(
- 'returncode' => $xml->returncode->__toString(),
- 'messageKey' => $xml->messageKey->__toString(),
- 'message' => $xml->message->__toString()
- );
- return $result;
- }
- else {
-
- $result = array(
- 'returncode' => $xml->returncode->__toString(),
- 'messageKey' => $xml->messageKey->__toString(),
- 'message' => $xml->message->__toString()
- );
-
- foreach ($xml->meetings->meeting as $m) {
- $result[] = array(
- 'meetingId' => $m->meetingID->__toString(),
- 'meetingName' => $m->meetingName->__toString(),
- 'createTime' => $m->createTime->__toString(),
- 'attendeePw' => $m->attendeePW->__toString(),
- 'moderatorPw' => $m->moderatorPW->__toString(),
- 'hasBeenForciblyEnded' => $m->hasBeenForciblyEnded->__toString(),
- 'running' => $m->running->__toString()
- );
- }
- return $result;
- }
- }
- else {
- return null;
- }
- }
- public function getMeetingInfoUrl($infoParams) {
-
- $this->_meetingId = $this->_requiredParam($infoParams['meetingId']);
- $this->_password = $this->_requiredParam($infoParams['password']);
- $infoUrl = $this->_bbbServerBaseUrl."api/getMeetingInfo?";
- $params =
- 'meetingID='.urlencode($this->_meetingId).
- '&password='.urlencode($this->_password);
- return ($infoUrl.$params.'&checksum='.sha1("getMeetingInfo".$params.$this->_securitySalt));
- }
- public function getMeetingInfoWithXmlResponseArray($infoParams) {
-
- $xml = $this->_processXmlResponse($this->getMeetingInfoUrl($infoParams));
- if($xml) {
-
- if (($xml->returncode != 'SUCCESS') || ($xml->messageKey == null)) {
- $result = array(
- 'returncode' => $xml->returncode->__toString(),
- 'messageKey' => $xml->messageKey->__toString(),
- 'message' => $xml->message->__toString()
- );
- return $result;
- } else {
-
- $result = array(
- 'returncode' => $xml->returncode->__toString(),
- 'meetingName' => $xml->meetingName->__toString(),
- 'meetingId' => $xml->meetingID->__toString(),
- 'createTime' => $xml->createTime->__toString(),
- 'voiceBridge' => $xml->voiceBridge->__toString(),
- 'attendeePw' => $xml->attendeePW->__toString(),
- 'moderatorPw' => $xml->moderatorPW->__toString(),
- 'running' => $xml->running->__toString(),
- 'recording' => $xml->recording->__toString(),
- 'hasBeenForciblyEnded' => $xml->hasBeenForciblyEnded->__toString(),
- 'startTime' => $xml->startTime->__toString(),
- 'endTime' => $xml->endTime->__toString(),
- 'participantCount' => $xml->participantCount->__toString(),
- 'maxUsers' => $xml->maxUsers->__toString(),
- 'moderatorCount' => $xml->moderatorCount->__toString(),
- 'internalMeetingID' => $xml->internalMeetingID->__toString()
- );
-
- foreach ($xml->attendees->attendee as $a) {
- $result[] = array(
- 'userId' => $a->userID->__toString(),
- 'fullName' => $a->fullName->__toString(),
- 'role' => $a->role->__toString()
- );
- }
- return $result;
- }
- }
- else {
- return null;
- }
- }
-
-
- public function getRecordingsUrl($recordingParams) {
-
- $recordingsUrl = $this->_bbbServerBaseUrl."api/getRecordings?";
- $params = 'meetingID='.urlencode($recordingParams['meetingId']);
- return ($recordingsUrl.$params.'&checksum='.sha1("getRecordings".$params.$this->_securitySalt));
- }
- public function getRecordingsWithXmlResponseArray($recordingParams) {
-
- $xml = $this->_processXmlResponse($this->getRecordingsUrl($recordingParams));
- if($xml) {
-
- if (($xml->returncode != 'SUCCESS') || ($xml->messageKey == null)) {
- $result = array(
- 'returncode' => $xml->returncode->__toString(),
- 'messageKey' => $xml->messageKey->__toString(),
- 'message' => $xml->message->__toString()
- );
- return $result;
- }
- else {
-
- $result = array(
- 'returncode' => $xml->returncode->__toString(),
- 'messageKey' => $xml->messageKey->__toString(),
- 'message' => $xml->message->__toString()
- );
- foreach ($xml->recordings->recording as $r) {
- $result[] = array(
- 'recordId' => $r->recordID->__toString(),
- 'meetingId' => $r->meetingID->__toString(),
- 'name' => $r->name->__toString(),
- 'published' => $r->published->__toString(),
- 'startTime' => $r->startTime->__toString(),
- 'endTime' => $r->endTime->__toString(),
- 'playbackFormatType' => $r->playback->format->type->__toString(),
- 'playbackFormatUrl' => $r->playback->format->url->__toString(),
- 'playbackFormatLength' => $r->playback->format->length->__toString(),
- 'metadataTitle' => $r->metadata->title->__toString(),
- 'metadataSubject' => $r->metadata->subject->__toString(),
- 'metadataDescription' => $r->metadata->description->__toString(),
- 'metadataCreator' => $r->metadata->creator->__toString(),
- 'metadataContributor' => $r->metadata->contributor->__toString(),
- 'metadataLanguage' => $r->metadata->language->__toString(),
-
-
- );
- }
- return $result;
- }
- }
- else {
- return null;
- }
- }
-
- public function getRecordings($recordingParams)
- {
-
- $xml = $this->_processXmlResponse($this->getRecordingsUrl($recordingParams));
- if($xml) {
-
- if (($xml->returncode != 'SUCCESS') || ($xml->messageKey == null)) {
- $result = array(
- 'returncode' => $xml->returncode->__toString(),
- 'messageKey' => $xml->messageKey->__toString(),
- 'message' => $xml->message->__toString()
- );
- return $result;
- }
- else {
-
- $result = array(
- 'returncode' => $xml->returncode->__toString(),
- 'messageKey' => $xml->messageKey->__toString(),
- 'message' => $xml->message->__toString()
- );
- $result['records'] = [];
- if (!empty($xml->recordings->recording)) {
- foreach ($xml->recordings->recording as $r) {
- $result['records'][] = array(
- 'recordId' => $r->recordID->__toString(),
- 'meetingId' => $r->meetingID->__toString(),
- 'name' => $r->name->__toString(),
- 'published' => $r->published->__toString(),
- 'startTime' => $r->startTime->__toString(),
- 'endTime' => $r->endTime->__toString(),
- 'playbackFormatType' => $r->playback->format->type->__toString(),
- 'playbackFormatUrl' => $r->playback->format->url->__toString(),
- 'playbackFormatLength' => $r->playback->format->length->__toString(),
- 'metadataTitle' => $r->metadata->title->__toString(),
- 'metadataSubject' => $r->metadata->subject->__toString(),
- 'metadataDescription' => $r->metadata->description->__toString(),
- 'metadataCreator' => $r->metadata->creator->__toString(),
- 'metadataContributor' => $r->metadata->contributor->__toString(),
- 'metadataLanguage' => $r->metadata->language->__toString(),
- );
- }
- }
- return $result;
- }
- }
- return null;
- }
- public function getPublishRecordingsUrl($recordingParams) {
-
- $recordingsUrl = $this->_bbbServerBaseUrl."api/publishRecordings?";
- $params =
- 'recordID='.urlencode($recordingParams['recordId']).
- '&publish='.urlencode($recordingParams['publish']);
- return ($recordingsUrl.$params.'&checksum='.sha1("publishRecordings".$params.$this->_securitySalt));
- }
- public function publishRecordingsWithXmlResponseArray($recordingParams) {
-
- $xml = $this->_processXmlResponse($this->getPublishRecordingsUrl($recordingParams));
- if($xml) {
- return array(
- 'returncode' => $xml->returncode->__toString(),
- 'published' => $xml->published->__toString()
- );
- }
- else {
- return null;
- }
- }
- public function getDeleteRecordingsUrl($recordingParams) {
-
- $recordingsUrl = $this->_bbbServerBaseUrl."api/deleteRecordings?";
- $params =
- 'recordID='.urlencode($recordingParams['recordId']);
- return ($recordingsUrl.$params.'&checksum='.sha1("deleteRecordings".$params.$this->_securitySalt));
- }
- public function deleteRecordingsWithXmlResponseArray($recordingParams) {
-
- $xml = $this->_processXmlResponse($this->getDeleteRecordingsUrl($recordingParams));
- if($xml) {
- return array(
- 'returncode' => $xml->returncode->__toString(),
- 'deleted' => $xml->deleted->__toString()
- );
- }
- else {
- return null;
- }
- }
-
- public function generateRecording($recordingParams)
- {
- if (empty($recordingParams)) {
- return false;
- }
- $recordingsUrl = $this->_bbbServerBaseUrl.'../demo/regenerateRecord.jsp?';
- $params = 'recordID='.urlencode($recordingParams['recordId']);
- $url = $recordingsUrl.$params.'&checksum='.sha1('regenerateRecord'.$params.$this->_securitySalt);
- $ch = curl_init() or die ( curl_error($ch) );
- $timeout = 10;
- curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt( $ch, CURLOPT_URL, $url );
- curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
- curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout);
- $data = curl_exec( $ch );
- curl_close( $ch );
- return true;
- }
- }
|