Created
January 21, 2019 10:34
-
-
Save shubham-99fusion/971f682228f326871f0640e99ef9ae95 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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