Skip to content

Instantly share code, notes, and snippets.

@shubham-99fusion
Created January 21, 2019 10:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shubham-99fusion/971f682228f326871f0640e99ef9ae95 to your computer and use it in GitHub Desktop.
Save shubham-99fusion/971f682228f326871f0640e99ef9ae95 to your computer and use it in GitHub Desktop.
add_filter('bp_course_api_get_user_course_status_item',function ($return, $request){
if(!class_exists('Wplms_Bbb'))
return $return;
global $wpdb;
$user_token = $request->get_header('authorization');
$user_id = $wpdb->get_var("SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key = '$user_token'");
$version = bp_course_get_setting( 'app_version', 'api','number' );
if(!is_numeric($user_id)){
return $return;
}
$course_id = $request['course'];
$item_id = $request['id'];
$bbb_obj = Wplms_Bbb::init();
$unit_obj =get_post($item_id);
$unit_content = $unit_obj->post_content;
//for bbb
if(false !== strpos($unit_content,'wplms_bbb')){
preg_match_all( '/' . get_shortcode_regex(array('wplms_bbb')) . '/', $unit_content, $matches6, PREG_SET_ORDER );
if ( !empty( $matches6 ) ){
foreach ( $matches6 as $shortcode4 ) {
preg_match('/token=[\'|"](.*?)[\'|"]/',$shortcode4[3],$token);
if(!empty($token[1])){
if(empty($token[1]) || empty($bbb_obj->wplms_bbb_meetings))
return $return;
$meeting = $bbb_obj->get_meeting($token[1]);
if(empty($meeting ))
return $return;
$users = $bbb_obj->users_from_restriction( $meeting,1);
if(!empty($users) && !in_array($user_id , $users))
return $return;
if(!empty($meeting['start_date'])){
$start_time = strtotime($meeting['start_date'].' '.$meeting['start_time']);
$actual_start_time = $start_time = strtotime($meeting['start_date'].' '.$meeting['start_time']);
$timestamp = 0;
$offset = $bbb_obj->offset;
$utc_time = time();
if($offset > 0){//means gmt offset is in positive
$start_time = $start_time - (abs($offset)*60*60);
$utc_time = $utc_time - (abs($offset)*60*60);
}else{//means gmt offset is in negative
$start_time = $start_time + (abs($offset)*60*60);
$utc_time = $utc_time + (abs($offset)*60*60);
}
}
$meeting_expiry_time = $start_time + ($meeting['duration']['duration']*$meeting['duration']['parameter']);
$meeting_expiry_time_gmt = $actual_start_time + ($meeting['duration']['duration']*$meeting['duration']['parameter']);
if($meeting_expiry_time <= time()){
$format = get_option( 'date_format' ).' '.get_option('time_format');;
$display_expire_time = date_i18n($format ,$meeting_expiry_time_gmt );
$return['content'] .='<div class="message">'. sprintf(_x('Meeting Expired on %s','meeting expired','wplms-bbb'),$display_expire_time).'</div><br>';
}else{
global $wpdb, $wp_roles, $wp_version, $current_site;
$current_user = get_user_by('id',$user_id);
$dataSubmitted = true;
$meetingExist = true;
$url_val = get_option('bigbluebutton_url');
$salt_val = get_option('bigbluebutton_salt');
$permissions = get_option('bigbluebutton_permissions');
$logouturl = admin_url('admin-ajax.php').'?action=meeting_logout&meeting='.$meeting['id'].'&meeting_security='.wp_create_nonce('meeting_logout'.$user_id);
$meetingID = $meeting['id'];
$role = null;
if( $current_user->ID ) {
$role = "unregistered";
foreach($wp_roles->role_names as $_role => $Role) {
if (array_key_exists($_role, $current_user->caps)) {
$role = $_role;
break;
}
}
} else {
$role = "anonymous";
}
$table_name = $wpdb->prefix . "bigbluebutton";
$table_logs_name = $wpdb->prefix . "bigbluebutton_logs";
$sql = "SELECT * FROM ".$table_name." WHERE meetingID = %s";
$found = $wpdb->get_row(
$wpdb->prepare($sql, $meetingID)
);
if( $found ) {
$found->meetingID = bigbluebutton_normalizeMeetingID($found->meetingID);
if( !$current_user->ID ) {
$name = _x('Anonymous','','wplms-bbb');
if( bigbluebutton_validate_defaultRole($role, 'none') ) {
$password = sanitize_text_field($_POST['pwd']);
} else {
$password = $permissions[$role]['defaultRole'] == 'none'? $found->moderatorPW: $found->attendeePW;
}
} else {
if( $current_user->display_name != '' ) {
$name = $current_user->display_name;
} else if( $current_user->user_firstname != '' || $current_user->user_lastname != '' ) {
$name = $current_user->user_firstname != ''? $current_user->user_firstname.' ': '';
$name .= $current_user->user_lastname != ''? $current_user->user_lastname.' ': '';
} else if( $current_user->user_login != '') {
$name = $current_user->user_login;
} else {
$name = $role;
}
if( bigbluebutton_validate_defaultRole($role, 'none') ) {
$password = sanitize_text_field($_POST['pwd']);
} else {
$password = $permissions[$role]['defaultRole'] == 'moderator'? $found->moderatorPW: $found->attendeePW;
}
}
//Extra parameters
$recorded = $found->recorded;
$welcome = (isset($args['welcome']))? html_entity_decode($args['welcome']): BIGBLUEBUTTON_STRING_WELCOME;
if( $recorded ) $welcome .= BIGBLUEBUTTON_STRING_MEETING_RECORDED;
$duration = 0;
$voicebridge = (isset($args['voicebridge']))? html_entity_decode($args['voicebridge']): 0;
//Metadata for tagging recordings
$metadata = Array(
'meta_origin' => 'WordPress',
'meta_originversion' => $wp_version,
'meta_origintag' => 'wp_plugin-bigbluebutton '.BIGBLUEBUTTON_PLUGIN_VERSION,
'meta_originservername' => home_url(),
'meta_originservercommonname' => get_bloginfo('name'),
'meta_originurl' => $logouturl
);
//Call for creating meeting on the bigbluebutton server
$response = BigBlueButton::createMeetingArray($name, $found->meetingID, $found->meetingName, $welcome, $found->moderatorPW, $found->attendeePW, $salt_val, $url_val, $logouturl, $recorded? 'true':'false', $duration, $voicebridge, $metadata );
//Analyzes the bigbluebutton server's response
if(!$response || $response['returncode'] == 'FAILED' ) {//If the server is unreachable, or an error occured
$out .= "Sorry an error occured while joining the meeting.";
$return['conetnt'] .= $out;
} else{ //The user can join the meeting, as it is valid
if( !isset($response['messageKey']) || $response['messageKey'] == '' ) {
// The meeting was just created, insert the create event to the log
$rows_affected = $wpdb->insert( $table_logs_name, array( 'meetingID' => $found->meetingID, 'recorded' => $found->recorded, 'timestamp' => time(), 'event' => 'Create' ) );
}
$bigbluebutton_joinURL = BigBlueButton::getJoinURL($found->meetingID, $name, $password, $salt_val, $url_val );
//If the meeting is already running or the moderator is trying to join or a viewer is trying to join and the
//do not wait for moderator option is set to false then the user is immediately redirected to the meeting
if ( (BigBlueButton::isMeetingRunning( $found->meetingID, $url_val, $salt_val ) && ($found->moderatorPW == $password || $found->attendeePW == $password ) )
|| $response['moderatorPW'] == $password
|| ($response['attendeePW'] == $password && !$found->waitForModerator) ) {
//If the password submitted is correct then the user gets redirected
$url = $bigbluebutton_joinURL;
}else if ($found->attendeePW == $password) {
$_SESSION['mt_bbb_url'] = $url_val;
$_SESSION['mt_salt'] = $salt_val;
$url = $bigbluebutton_joinURL;
}
}
}
}
if(!empty($url)){
if(empty($return['meta']['iframes_bbb'])){
if(!empty($version) && $version > 2){
$return['meta']['iframes_bbb'] = array(array('shortcode'=>'wplms_bbb','value'=>$url));
}else{
$return['meta']['iframes_bbb'] = array($url);
}
}else{
if(!empty($version) && $version > 2){
$return['meta']['iframes_bbb'][] = array('shortcode'=>'wplms_bbb','value'=>$url);
}else{
$return['meta']['iframes_bbb'][] = $url;
}
}
}
}
}
}
$regex = get_shortcode_regex(array('wplms_bbb'));
$return['content'] = preg_replace("/$regex/s", " ", $return['content']);
}
return $return;
},10,2);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment