Select Git revision
join.php 8.01 KiB
<?php
/**
* @package mod
* @subpackage adobeconnect
* @author Akinsaya Delamarre (adelamarre@remote-learner.net)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once(dirname(dirname(dirname(__FILE__))).'/config.php');
require_once(dirname(__FILE__).'/locallib.php');
require_once(dirname(__FILE__).'/connect_class.php');
require_once(dirname(__FILE__).'/connect_class_dom.php');
$id = required_param('id', PARAM_INT); // course_module ID, or
$groupid = required_param('groupid', PARAM_INT);
$sesskey = required_param('sesskey', PARAM_ALPHANUM);
global $CFG, $USER, $DB, $OUTPUT;
if (! $cm = get_coursemodule_from_id('adobeconnect', $id)) {
error('Course Module ID was incorrect');
}
$cond = array('id' => $cm->course);
if (! $course = $DB->get_record('course', $cond)) {
error('Course is misconfigured');
}
$cond = array('id' => $cm->instance);
if (! $adobeconnect = $DB->get_record('adobeconnect', $cond)) {
error('Course module is incorrect');
}
require_login($course, true, $cm);
// Check if the user's email is the Connect Pro user's login
$usrobj = new stdClass();
$usrobj = clone($USER);
if (isset($CFG->adobeconnect_email_login) and !empty($CFG->adobeconnect_email_login)) {
$usrobj->username = $usrobj->email;
}
if (0 != $cm->groupmode){
if (empty($groupid)) {
$groups = groups_get_user_groups($course->id, $usrobj->id);
if (array_key_exists(0, $groups)) {
$groupid = current($groups[0]);
}
if (empty($groupid)) {
$groupid = 0;
echo $OUTPUT->header();
echo '<p> <p>';
echo $OUTPUT->notification(get_string('usergrouprequired', 'adobeconnect'));
echo $OUTPUT->footer();
return;
}
}
} else {
$groupid = 0;
}
$usrcanjoin = false;
$usrgroups = groups_get_user_groups($cm->course, $usrobj->id);
$usrgroups = $usrgroups[0]; // Just want groups and not groupings
// If separate groups is enabled, check if the user is a part of the selected group
if (0 != $cm->groupmode/*$adobeconnect->meetingpublic*/) {
if (false !== array_search($groupid, $usrgroups)) {
$usrcanjoin = true;
}
}
$context = get_context_instance(CONTEXT_COURSE, $cm->course);
// Make sure the user has a role in the course
$crsroles = get_roles_used_in_context($context);
if (empty($crsroles)) {
$crsroles = array();
}
foreach ($crsroles as $roleid => $crsrole) {
if (user_has_role_assignment($usrobj->id, $roleid, $context->id)) {
$usrcanjoin = true;
}
}
// user has to be in a group
if ($usrcanjoin and confirm_sesskey($sesskey)) {
$usrprincipal = 0;
$validuser = true;
$groupobj = groups_get_group($groupid);
// Get the meeting sco-id
$param = array('instanceid' => $cm->instance, 'groupid' => $groupid);
$meetingscoid = $DB->get_field('adobeconnect_meeting_groups', 'meetingscoid', $param);
$aconnect = aconnect_login();
// Check if the meeting still exists on the Adobe server
//
// DFNVC
//
// $meetfldscoid = aconnect_get_folder($aconnect, 'meetings');
$meetfldscoid = aconnect_get_meeting_folder($aconnect);
//
//
$filter = array('filter-sco-id' => $meetingscoid);
$meeting = aconnect_meeting_exists($aconnect, $meetfldscoid, $filter);
if (!empty($meeting)) {
$meeting = current($meeting);
}
// DFNVC
//if (!($usrprincipal = aconnect_user_exists($aconnect, $usrobj))) {
if (!($usrprincipal = lms_user_exists($aconnect, $usrobj))) {
if (!($usrprincipal = aconnect_create_user($aconnect, $usrobj))) {
// DEBUG
print_object("error creating user");
print_object($aconnect->_xmlresponse);
$validuser = false;
}
}
$context = get_context_instance(CONTEXT_MODULE, $id);
// Check the user's capabilities and assign them the Adobe Role
if (!empty($meetingscoid) and !empty($usrprincipal) and !empty($meeting)) {
if (has_capability('mod/adobeconnect:meetinghost', $context, $usrobj->id, false)) {
if (aconnect_check_user_perm($aconnect, $usrprincipal, $meetingscoid, ADOBE_HOST, true)) {
//DEBUG
// echo 'host';
// die();
} else {
//DEBUG
print_object('error assign user adobe host role');
print_object($aconnect->_xmlrequest);
print_object($aconnect->_xmlresponse);
$validuser = false;
}
} elseif (has_capability('mod/adobeconnect:meetingpresenter', $context, $usrobj->id, false)) {
if (aconnect_check_user_perm($aconnect, $usrprincipal, $meetingscoid, ADOBE_PRESENTER, true)) {
//DEBUG
// echo 'presenter';
// die();
} else {
//DEBUG
print_object('error assign user adobe presenter role');
print_object($aconnect->_xmlrequest);
print_object($aconnect->_xmlresponse);
$validuser = false;
}
} elseif (has_capability('mod/adobeconnect:meetingparticipant', $context, $usrobj->id, false)) {
if (aconnect_check_user_perm($aconnect, $usrprincipal, $meetingscoid, ADOBE_PARTICIPANT, true)) {
//DEBUG
// echo 'participant';
// die();
} else {
//DEBUG
print_object('error assign user adobe particpant role');
print_object($aconnect->_xmlrequest);
print_object($aconnect->_xmlresponse);
$validuser = false;
}
} else {
// Check if meeting is public and allow them to join
if ($adobeconnect->meetingpublic) {
// if for a public meeting the user does not not have either of presenter or participant capabilities then give
// the user the participant role for the meeting
aconnect_check_user_perm($aconnect, $usrprincipal, $meetingscoid, ADOBE_PARTICIPANT, true);
$validuser = true;
} else {
$validuser = false;
}
}
} else {
$validuser = false;
notice(get_string('unableretrdetails', 'adobeconnect'));
}
//aconnect_logout($aconnect);
// User is either valid or invalid, if valid redirect user to the meeting url
if (empty($validuser)) {
notice(get_string('notparticipant', 'adobeconnect'));
} else {
$protocol = 'http://';
$https = false;
$login = $usrobj->username;
if (isset($CFG->adobeconnect_https) and (!empty($CFG->adobeconnect_https))) {
$protocol = 'https://';
$https = true;
}
// DFNVC
// $aconnect = new connect_class_dom($CFG->adobeconnect_host, $CFG->adobeconnect_port,
// '', '', '', $https);
//$aconnect = aconnect_login();
//$aconnect->request_http_header_login(1, $login);
//
$user_session_cookie = $aconnect->user_session_cookie($login);
//aconnect_logout($aconnect);
// Include the port number only if it is a port other than 80
$port = '';
if (!empty($CFG->adobeconnect_port) and (80 != $CFG->adobeconnect_port)) {
$port = ':' . $CFG->adobeconnect_port;
}
add_to_log($course->id, 'adobeconnect', 'join meeting',
"join.php?id=$cm->id&groupid=$groupid&sesskey=$sesskey",
"Joined $adobeconnect->name meeting", $cm->id);
aconnect_logout($aconnect);
redirect($protocol . $CFG->adobeconnect_meethost . $port
. $meeting->url
// . '?session=' . $aconnect->get_cookie());
. '?session=' . $user_session_cookie);
}
} else {
notice(get_string('usernotenrolled', 'adobeconnect'));
}