Explorar el Código

More fixes in the bbb videoconference tool, now when entering to the videoconference we see a list of records see BT#3123

Julio Montoya hace 13 años
padre
commit
b481c0e8c7

+ 32 - 19
plugin/bbb/bbb.lib.php

@@ -1,4 +1,5 @@
 <?php
+
 /**
  * This script initiates a videoconference session, calling the BigBlueButton API
  * @package chamilo.plugin.bigbluebutton
@@ -43,6 +44,10 @@ class bbb {
         return false;
     }
     
+    function is_teacher() {
+        return api_is_course_admin() || api_is_coach() || api_is_platform_admin();
+    }
+    
     function create_meeting($params) {        
         $params['c_id'] = api_get_course_int_id();  
         $course_code = api_get_course_id();
@@ -62,21 +67,22 @@ class bbb {
         $id = Database::insert($this->table, $params);
         
         if ($id) {
-            if ($this->debug) error_log("create_meeting $id ");
+            if ($this->debug) error_log("create_meeting: $id ");
             
             $meeting_name       = isset($params['meeting_name']) ? $params['meeting_name'] : api_get_course_id();            
             $welcome_msg        = isset($params['welcome_msg']) ? $params['welcome_msg'] : null;
             $record             = isset($params['record']) && $params['record'] ? 'true' : 'false';
             $duration           = isset($params['duration']) ? intval($params['duration']) : 0;
             
-
             // ?? 
             $voiceBridge = 0;
             $metadata = array('maxParticipants' => $max);                      
-            return $this->protocol.BigBlueButtonBN::createMeetingAndGetJoinURL(
+            $result = $this->protocol.BigBlueButtonBN::createMeetingAndGetJoinURL(
                             $this->user_complete_name, $meeting_name, $id, $welcome_msg, $moderator_password, $attende_password, 
                             $this->salt, $this->url, $this->logout_url, $record, $duration, $voiceBridge, $metadata
             );       
+            if ($this->debug) error_log("create_meeting result: ".print_r($result,1));
+            return $result;
         }
     }
     
@@ -95,7 +101,8 @@ class bbb {
      * @todo implement moderator pass
      */
     function join_meeting($meeting_name) {        
-        $pass = $this->get_user_metting_password();
+        $pass = $this->get_user_meeting_password();
+        $mod_pass = $this->get_mod_meeting_password();
         $meeting_data = Database::select('*', $this->table, array('where' => array('meeting_name = ? AND status = 1 ' => $meeting_name)), 'first');
         if (empty($meeting_data)) {
             if ($this->debug) error_log("meeting does not exist: $meeting_name ");
@@ -103,16 +110,16 @@ class bbb {
         }        
                 
         $meeting_is_running = BigBlueButtonBN::isMeetingRunning($meeting_data['id'], $this->url, $this->salt);
-        
-        
-        $meeting_info = BigBlueButtonBN::getMeetingInfoArray($meeting['id'], $pass, $this->url, $this->salt);
+        $meeting_info = BigBlueButtonBN::getMeetingInfoArray($meeting_data['id'], $mod_pass, $this->url, $this->salt);
         $meeting_info_exists = false;
         
         if ($meeting_info['returncode'] != 'FAILED') {
             $meeting_info_exists = true;
-        }                  
+        }
+        
         $url = false;
-        if ($this->debug) error_log("meeting is running".$meeting_is_running);
+        if ($this->debug) error_log("meeting is running: ".$meeting_is_running);        
+        if ($this->debug) error_log("meeting is running:getMeetingInfoArray  ".print_r($meeting_info, 1));
         
         if (isset($meeting_is_running) && $meeting_info_exists) {        
             $url = $this->protocol.BigBlueButtonBN::joinURL($meeting_data['id'], $this->user_complete_name, $pass, $this->salt, $this->url);        
@@ -126,7 +133,7 @@ class bbb {
      * @return string 
      */
     function get_course_meetings() {
-        $pass = $this->get_user_metting_password();
+        $pass = $this->get_user_meeting_password();
         $meeting_list = Database::select('*', $this->table, array('where' => array('c_id = ? ' => api_get_course_int_id())));                     
         $new_meeting_list = array();
         
@@ -139,6 +146,7 @@ class bbb {
                 $item_meeting['end_url']             = api_get_self().'?action=end&id='.$meeting['id'];    
                 $item_meeting['add_to_calendar_url'] = api_get_self().'?action=add_to_calendar&id='.$meeting['id'].'&start='.api_strtotime($meeting['created_at']);
             }   
+            
             $record_array = array();
             
             if ($meeting['record'] == 1) {                
@@ -156,10 +164,12 @@ class bbb {
                             foreach ($record['playbacks'] as $item) {                                                        
                                 $url = Display::url(get_lang('ViewRecord'), $item['url'], array('target' => '_blank'));
                                 //$url .= Display::url(get_lang('DeleteRecord'), api_get_self().'?action=delete_record&'.$record['recordID']);
-                                $url .= Display::url(Display::return_icon('link.gif',get_lang('CopyToLinkTool')), api_get_self().'?action=copy_record_to_link_tool&id='.$meeting['id'].'&record_id='.$record['recordID']);
-                                $url .= Display::url(Display::return_icon('agenda.png',get_lang('AddToCalendar')), api_get_self().'?action=add_to_calendar&id='.$meeting['id'].'&start='.api_strtotime($meeting['created_at']).'&url='.$item['url']);
-                                $url .= Display::url(Display::return_icon('delete.png',get_lang('Delete')), api_get_self().'?action=delete_record&id='.$record['recordID']);
-                                
+                                if ($this->is_teacher()) {
+                                    $url .= Display::url(Display::return_icon('link.gif',get_lang('CopyToLinkTool')), api_get_self().'?action=copy_record_to_link_tool&id='.$meeting['id'].'&record_id='.$record['recordID']);
+                                    $url .= Display::url(Display::return_icon('agenda.png',get_lang('AddToCalendar')), api_get_self().'?action=add_to_calendar&id='.$meeting['id'].'&start='.api_strtotime($meeting['created_at']).'&url='.$item['url']);
+                                    $url .= Display::url(Display::return_icon('delete.png',get_lang('Delete')), api_get_self().'?action=delete_record&id='.$record['recordID']);
+                                }
+
                                 
                                 //$url .= api_get_self().'?action=publish&id='.$record['recordID'];
                                 $count++;
@@ -194,20 +204,23 @@ class bbb {
     }
     
     function end_meeting($id) {
-        $pass = $this->get_user_metting_password();
+        $pass = $this->get_user_meeting_password();
         BigBlueButtonBN::endMeeting($id, $pass, $this->url, $this->salt);
         Database::update($this->table, array('status' => 0), array('id = ? ' => $id));
     }
     
-    function get_user_metting_password() {
-        $teacher = api_is_course_admin() || api_is_coach() || api_is_platform_admin();
-        if ($teacher) {
+    function get_user_meeting_password() {        
+        if ($this->is_teacher()) {
             return api_get_course_id().'mod';
         } else {
             return api_get_course_id();
         }
     }
     
+    function get_mod_meeting_password() {        
+        return api_get_course_id().'mod';        
+    }
+    
     /**
      * Get users online in the current course room 
      */
@@ -217,7 +230,7 @@ class bbb {
         if (empty($meeting_data)) {
             return 0;
         }        
-        $pass = $this->get_user_metting_password();        
+        $pass = $this->get_mod_meeting_password();        
         //$meeting_is_running = BigBlueButtonBN::isMeetingRunning($meeting_data['id'], $this->url, $this->salt);
         $info = BigBlueButtonBN::getMeetingInfoArray($meeting_data['id'], $pass, $this->url, $this->salt);
                 

+ 1 - 1
plugin/bbb/course_install.php

@@ -43,6 +43,6 @@ if (!empty($course_id)) {
     $r = Database::query($sql_course);   
     
     $t_tool = Database::get_course_table(TABLE_TOOL_LIST);
-    $sql_course = "INSERT INTO $t_tool VALUES ($course_id, NULL, 'videoconference','../../plugin/bbb/start.php','visio.gif','".string2binary(api_get_setting('course_create_active_tools', 'videoconference'))."','0','squaregrey.gif','NO','_blank','plugin','0')";
+    $sql_course = "INSERT INTO $t_tool VALUES ($course_id, NULL, 'videoconference','../../plugin/bbb/start.php','visio.gif','".string2binary(api_get_setting('course_create_active_tools', 'videoconference'))."','0','squaregrey.gif','NO','_self','plugin','0')";
     $r = Database::query($sql_course);
 }

+ 1 - 1
plugin/bbb/install.php

@@ -64,7 +64,7 @@ while ($row = Database::fetch_assoc($res)) {
     $sql = "SELECT name FROM $t_tool WHERE c_id = $course_id AND name = 'videoconference' ";
     $result = Database::query($sql);
     if (!Database::num_rows($result)) {
-        $sql_course = "INSERT INTO $t_tool VALUES ($course_id, NULL, 'videoconference','../../plugin/bbb/start.php','visio.gif','".string2binary(api_get_setting('course_create_active_tools', 'videoconference'))."','0','squaregrey.gif','NO','_blank','plugin','0')";
+        $sql_course = "INSERT INTO $t_tool VALUES ($course_id, NULL, 'videoconference','../../plugin/bbb/start.php','visio.gif','".string2binary(api_get_setting('course_create_active_tools', 'videoconference'))."','0','squaregrey.gif','NO','_self','plugin','0')";
         $r = Database::query($sql_course);    
     }    
 }

+ 7 - 3
plugin/bbb/lang/english.php

@@ -10,7 +10,6 @@
 $strings['plugin_title']        = "BigBlueButton";
 $strings['plugin_comment']      = "Open Source Videoconference tool";
 
-
 $strings['Videoconference']     = "Videoconference";
 $strings['MeetingOpened']       = "Meeting opened";
 $strings['MeetingClosed']       = "Meeting closed";
@@ -18,6 +17,9 @@ $strings['CloseMeeting']        = "Close meeting";
 
 $strings['VideoConferenceXCourseX']             = "Videoconference #%s course %s";
 $strings['VideoConferenceAddedToTheCalendar']   = "Videoconference added to the calendar";
+$strings['VideoConferenceAddedToTheLinkTool']   = "Videoconference added to the link tool";
+
+$strings['GoToTheVideoConference']   = "Go to the videoconference";
 
 $strings['Records']             = "Records";
 $strings['Meeting']             = "Meeting";
@@ -25,7 +27,9 @@ $strings['Meeting']             = "Meeting";
 $strings['ViewRecord']          = "View record";
 $strings['CopyToLinkTool']      = "Copy to link tool";
 
-$strings['StartConference']     = "Start conference";
+$strings['EnterConference']     = "Enter to the videoconference";
 $strings['RecordList']          = "Record list";
 $strings['ServerIsNotRunning']  = "Videoconference server is not running";
-$strings['XUsersOnLine']        = "%s user(s) online";
+$strings['ServerIsNotConfigured']  = "Videoconference server is not configured";
+
+$strings['XUsersOnLine']        = "%s user(s) online";

+ 47 - 45
plugin/bbb/listing.php

@@ -13,57 +13,59 @@ require_once '../../main/inc/global.inc.php';
 require_once 'bbb.lib.php';
 require_once 'bbb_api.php';
 
-
 $tool_name = get_lang('Videoconference');
 $tpl = new Template($tool_name);
 
 $bbb = new bbb();
 $action = isset($_GET['action']) ? $_GET['action'] : null;
 
-switch ($action) {
-    case 'add_to_calendar':
-        $course_info = api_get_course_info();        
-        $agenda = new Agenda();
-        $agenda->type = 'course';
-        
-        $id = intval($_GET['id']);        
-        $title = sprintf(get_lang('VideoConferenceXCourseX'), $id, $course_info['name']);
-        $content = Display::url(get_lang('GoToTheVideoConference'), $_GET['url']);
-        
-        $event_id = $agenda->add_event($_REQUEST['start'], null, 'true', null, $title, $content, array('everyone'));
-        if (!empty($event_id)) {        
-            $message = Display::return_message(get_lang('VideoConferenceAddedToTheCalendar'), 'success');
-        } else {
-            $message = Display::return_message(get_lang('Error'), 'error');
-        }
-        
-        break;
-    case 'copy_record_to_link_tool':
-        $result = $bbb->copy_record_to_link_tool($_GET['id'], $_GET['record_id']);        
-        if ($result) {
-            $message = Display::return_message(get_lang('Copied'), 'success');
-        } else {
-            $message = Display::return_message(get_lang('Error'), 'error');
-        }
-        break;
-    case 'delete_record':
-        $bbb->delete_record($_GET['id']);
-        if ($result) {
-            $message = Display::return_message(get_lang('Deleted'), 'success');
-        } else {
-            $message = Display::return_message(get_lang('Error'), 'error');
-        }
-        break;
-    case 'end':
-        $bbb->end_meeting($_GET['id']);
-        $message = Display::return_message(get_lang('MeetingClosed'), 'success');
-        break;    
-    case 'publish':
-        //$result = $bbb->publish_meeting($_GET['id']);
-        break;
-    case 'unpublish':
-        //$result = $bbb->unpublish_meeting($_GET['id']);
-        break;
+$teacher = api_is_course_admin() || api_is_coach() || api_is_platform_admin();
+
+if ($teacher) {
+    switch ($action) {
+        case 'add_to_calendar':
+            $course_info = api_get_course_info();        
+            $agenda = new Agenda();
+            $agenda->type = 'course';
+
+            $id = intval($_GET['id']);        
+            $title = sprintf(get_lang('VideoConferenceXCourseX'), $id, $course_info['name']);
+            $content = Display::url(get_lang('GoToTheVideoConference'), $_GET['url']);
+
+            $event_id = $agenda->add_event($_REQUEST['start'], null, 'true', null, $title, $content, array('everyone'));
+            if (!empty($event_id)) {        
+                $message = Display::return_message(get_lang('VideoConferenceAddedToTheCalendar'), 'success');
+            } else {
+                $message = Display::return_message(get_lang('Error'), 'error');
+            }        
+            break;
+        case 'copy_record_to_link_tool':
+            $result = $bbb->copy_record_to_link_tool($_GET['id'], $_GET['record_id']);        
+            if ($result) {
+                $message = Display::return_message(get_lang('VideoConferenceAddedToTheLinkTool'), 'success');
+            } else {
+                $message = Display::return_message(get_lang('Error'), 'error');
+            }
+            break;
+        case 'delete_record':
+            $bbb->delete_record($_GET['id']);
+            if ($result) {
+                $message = Display::return_message(get_lang('Deleted'), 'success');
+            } else {
+                $message = Display::return_message(get_lang('Error'), 'error');
+            }
+            break;
+        case 'end':
+            $bbb->end_meeting($_GET['id']);
+            $message = Display::return_message(get_lang('MeetingClosed'), 'success');
+            break;    
+        case 'publish':
+            //$result = $bbb->publish_meeting($_GET['id']);
+            break;
+        case 'unpublish':
+            //$result = $bbb->unpublish_meeting($_GET['id']);
+            break;
+    }
 }
 
 $meetings       = $bbb->get_course_meetings();

+ 17 - 12
plugin/bbb/listing.tpl

@@ -3,14 +3,13 @@
 {% if bbb_status == true %}    
     
     <div class ="span12" style="text-align:center">
-        <a href="{{ conference_url }}" class="btn btn-primary btn-large">
-            {{ 'StartConference'|get_lang }} 	
+        <a href="{{ conference_url }}" target="_blank" class="btn btn-primary btn-large">
+            {{ 'EnterConference'|get_lang }} 	
         </a>
         <span id="users_online" class="label label-warning">{{ 'XUsersOnLine'| get_lang | format(users_online) }} </span>
     </div>
 
-    <div class ="span12">    
-
+    <div class ="span12">
         <div class="page-header">
             <h2>{{ 'RecordList'|get_lang }}</h2>
         </div>
@@ -21,7 +20,11 @@
                 <th>{{'CreatedAt'|get_lang}}</th>
                 <th>{{'Status'|get_lang}}</th>
                 <th>{{'Records'|get_lang}}</th>
-                <th>{{'Actions'|get_lang}}</th>
+                 
+                {% if _u.status == 1 %}
+                    <th>{{'Actions'|get_lang}}</th>
+                {% endif %}
+                    
             </tr>    
             {% for meeting in meetings %}
             <tr>
@@ -37,16 +40,18 @@
                 <td>                      
                     {% if meeting.record == 1 %}
                         {# Record list #}
-                        {{ meeting.show_links }}
-                        <!-- <a href="{{ meeting.publish_url}} "> Publish </a>
-                        <a href="{{ meeting.unpublish_url}} "> UnPublish </a> -->
+                        {{ meeting.show_links }}                        
                     {% endif %}
                 </td>
-                <td>
-                {% if meeting.status == 1 %}                                        
-                    <a class="btn" href="{{ meeting.end_url }} "> {{'CloseMeeting'|get_lang}}</a>                    
+                
+                {% if _u.status == 1 %}
+                    <td>
+                    {% if meeting.status == 1 %}                                        
+                        <a class="btn" href="{{ meeting.end_url }} "> {{'CloseMeeting'|get_lang}}</a>                    
+                    {% endif %}                    
+                    </td>
                 {% endif %}
-                </td>
+                    
             </tr>
             {% endfor %}
         </table>

+ 31 - 84
plugin/bbb/start.php

@@ -10,97 +10,44 @@ require_once '../../main/inc/global.inc.php';
 require_once 'bbb.lib.php';
 require_once 'bbb_api.php';
 
-$course_code = api_get_course_id();
-
-$meeting_params = array();
-$meeting_params['meeting_name'] = api_get_course_id();
-
-$teacher = api_is_course_admin() || api_is_coach() || api_is_platform_admin();
-
-//If I'm a teacher I'm going to the listing page
-if ($teacher && !isset($_GET['launch'])) {
-    header('location: listing.php?'.api_get_cidreq());
-    exit;
-}
+$tool_name = get_lang('Videoconference');
+$tpl = new Template($tool_name);
 
 $bbb = new bbb();
 
 if ($bbb) {
-    if ($bbb->is_meeting_exist($meeting_params['meeting_name'])) {
-        $url = $bbb->join_meeting($meeting_params['meeting_name']);        
-        if ($url) {
-            header('location: '.$url);
-            exit;
+    if ($bbb->is_server_running()) {
+        
+        if (isset($_GET['launch']) && $_GET['launch'] == 1) {
+        
+            $meeting_params = array();
+            $meeting_params['meeting_name'] = api_get_course_id();
+
+            if ($bbb->is_meeting_exist($meeting_params['meeting_name'])) {
+                $url = $bbb->join_meeting($meeting_params['meeting_name']);        
+                if ($url) {
+                    header('location: '.$url);
+                    exit;
+                } else {
+                    $url = $bbb->create_meeting($meeting_params);
+                    header('location: '.$url);
+                    exit;
+                }        
+            } else {
+                $url = $bbb->create_meeting($meeting_params);
+                header('location: '.$url);
+                exit;
+            }
         } else {
-            $url = $bbb->create_meeting($meeting_params);
+            $url = 'listing.php';
             header('location: '.$url);
             exit;
-        }        
-    } else {
-        $url = $bbb->create_meeting($meeting_params);
-        header('location: '.$url);
-        exit;
-    }
-} else {
-    if (api_is_platform_admin()) {
-        Display::display_warning_message(get_lang('NotConfigured'));
-    }
-}
-
-header('location: '.api_get_path(WEB_COURSE_PATH).'/'.$course_code);
-exit;
-
-/*
-$teacher = api_is_course_admin() || api_is_coach() || api_is_platform_admin();
-$user_info = api_get_user_info(api_get_user_id());
-$full_user_name = api_get_person_name($user_info['firstname'],$user_info['lastname']);
-$user_id = api_get_user_id();
-
-$is_running = wc_isMeetingRunning($bbb_host, $bbb_salt, $meeting_name);
-
-if ($is_running == 'true') {
-    // The conference is running, everything is fine, join
-    header('location: '.wc_joinMeetingURL($bbb_host,$bbb_salt,$full_user_name,$meeting_name,($teacher?$meeting_mod_pw:$meeting_att_pw),$user_id));
-    exit;
-} else { //$is_running = false or 'false'
-    // The conference room does not seem to be running...
-    // First, try harder and ignore the "running" status
-    $meetings = wc_getRunningMeetings($bbb_host,$bbb_salt);
-    
-    if (!empty($meetings)) {
-        foreach ($meetings as $meeting) {
-            //Try to find our meeting room in the list...
-            if ($meeting['meetingID'] == $meeting_name) {
-                $meeting_info = wc_getMeetingInfo($bbb_host,$bbb_salt,$meeting_name,$meeting_mod_pw);
-                error_log('Found passive meeting created '.($meeting_info['createTime']).' seconds ago with '.count($meeting_info['attendees']).' attendees - joining as '.($teacher?'teacher':'student'));
-                //if the user is a teacher, or if there are already attendees in
-                // the conference room, then allow joining it
-                if ($teacher or count($meeting_info['attendees'])>0) {
-                    header('location: '.wc_joinMeetingURL($bbb_host,$bbb_salt,$full_user_name,$meeting_name,($teacher?$meeting_mod_pw:$meeting_att_pw),$user_id));
-                    exit; 
-                }
-            }
-        }
-    }
-    
-    // That conference room is really not running or it has no accompanying moderator subscribed
-    //if (1) {
-    
-    if ($teacher) {
-        // The user is a teacher, so he has the right to create the
-        //  room, so create it and join it
-        //var_dump($bbb_host,$bbb_salt,$meeting_name,$meeting_name,$meeting_att_pw,$meeting_mod_pw,$meeting_wel_ms,api_get_path(WEB_COURSE_PATH).'/'.$course_code);    
-        $result = wc_createMeeting($bbb_host, $bbb_salt, $meeting_name, $meeting_name, $meeting_att_pw, $meeting_mod_pw, $meeting_wel_ms, api_get_path(WEB_COURSE_PATH).'/'.$course_code, $record_conference);
-        if ($result) {
-            header('location: '.wc_joinMeetingURL($bbb_host,$bbb_salt,$full_user_name,$meeting_name,($teacher?$meeting_mod_pw:$meeting_att_pw),$user_id));        
-            exit;
         }
+    } else {
+        $message = Display::return_message(get_lang('ServerIsNotRunning'), 'warning');        
     }
-    // There is no conference room for this course and the user
-    // is a mere student, so he cannot start a conference room by
-    // himself: a teacher has to launch it first
-    
-    header('location: '.api_get_path(WEB_COURSE_PATH).'/'.$course_code);
-    exit;
+} else {    
+    $message = Display::return_message(get_lang('ServerIsNotConfigured'), 'warning');    
 }
-*/
+$tpl->assign('message', $message);
+$tpl->display_one_col_template();