Browse Source

Add regenerate recording setting see BT#15618

Julio Montoya 5 years ago
parent
commit
c393fe0aee

+ 1 - 0
plugin/bbb/lang/english.php

@@ -75,3 +75,4 @@ $strings['ParticipantsWillUseSameInterface'] = 'Participants will use the same i
 $strings['SetByStudent'] = 'Set by student';
 $strings['SetByTeacher'] = 'Set by teacher';
 $strings['SetByDefault'] = 'Set to default interface';
+$strings['allow_regenerate_recording'] = 'Allow regenerate recording';

+ 76 - 1
plugin/bbb/lib/bbb.lib.php

@@ -734,7 +734,7 @@ class bbb
             );
         }
 
-        $conditions['order'] = "created_at ASC";
+        $conditions['order'] = 'created_at ASC';
 
         $meetingList = Database::select(
             '*',
@@ -1115,6 +1115,53 @@ class bbb
         return 0;
     }
 
+    /**
+     * @param int $id
+     * @param int $recordId
+     *
+     * @return bool
+     */
+    public function regenerateRecording($id, $recordId)
+    {
+        if (empty($id)) {
+            return false;
+        }
+
+        $meetingData = Database::select(
+            '*',
+            $this->table,
+            array('where' => array('id = ?' => array($id))),
+            'first'
+        );
+
+        // Check if there are recordings for this meeting
+        $recordings = $this->api->getRecordings(['meetingId' => $meetingData['remote_id']]);
+        if (!empty($recordings) && isset($recordings['messageKey']) && $recordings['messageKey'] == 'noRecordings') {
+            return false;
+        } else {
+            if (!empty($recordings['records'])) {
+                $recordExists = false;
+                foreach ($recordings['records'] as $record) {
+                    if ($recordId == $record['recordId']) {
+                        $recordExists = true;
+                        break;
+                    }
+                }
+
+                if ($recordExists) {
+                    $recordingParams = ['recordId' => $recordId];
+                    $result = $this->api->generateRecordingWithXmlResponseArray($recordingParams);
+                    if (!empty($result) && isset($result['deleted']) && $result['deleted'] === 'true') {
+                        return true;
+                    }
+                }
+
+            }
+        }
+
+        return false;
+    }
+
     /**
      * Deletes a recording of a meeting
      *
@@ -1389,6 +1436,27 @@ class bbb
         return api_get_path(WEB_PLUGIN_PATH).'bbb/listing.php?'.$this->getUrlParams().'&action=delete_record&id='.$meeting['id'];
     }
 
+    /**
+     * @param array $meeting
+     * @param array $recordInfo
+     *
+     * @return string
+     */
+    public function regenerateRecordUrl($meeting, $recordInfo)
+    {
+        if ($this->plugin->get('allow_regenerate_recording') !== 'true') {
+            return '';
+        }
+
+        if (!isset($meeting['id'])) {
+            return '';
+        }
+
+        return api_get_path(WEB_PLUGIN_PATH).
+            'bbb/listing.php?'.$this->getUrlParams().'&action=regenerate_record&id='.$meeting['id'].'&record_id='.$recordInfo['recordId'];
+    }
+
+
     /**
      * @param array $meeting
      * @return string
@@ -1571,6 +1639,13 @@ class bbb
             }
         }
 
+        if (!empty($recordInfo)) {
+            $links[] = Display::url(
+                Display::return_icon('refresh.gif', get_lang('RegenerateRecord')),
+                $this->regenerateRecordUrl($meetingInfo, $recordInfo)
+            );
+        }
+
         if (!$isAdminReport) {
             $links[] = Display::url(
                 Display::return_icon('delete.png', get_lang('Delete')),

+ 20 - 3
plugin/bbb/lib/bbb_api.php

@@ -640,8 +640,25 @@ class BigBlueButtonBN {
 
 	}
 
+	/** USAGE:
+	 * $recordingParams = array(
+	 * 'recordId' => '1234',        -- REQUIRED - comma separate if multiple ids
+	 * );
+	 */
+	public function generateRecordingWithXmlResponseArray($recordingParams)
+	{
+		$recordingsUrl = $this->_bbbServerBaseUrl.'demo/regenerateRecord.jsp?';
+		$params = 'recordID='.urlencode($recordingParams['recordId']);
+		$url = $recordingsUrl.$params.'&checksum='.sha1('regenerateRecord'.$params.$this->_securitySalt);
 
+		$xml = $this->_processXmlResponse($url);
+		if ($xml) {
+			return array(
+				'returncode' => $xml->returncode->__toString(),
+			);
+		} else {
+			return null;
+		}
 
-} // END OF BIGBLUEBUTTON CLASS
-
-?>
+	}
+}

+ 2 - 1
plugin/bbb/lib/bbb_plugin.class.php

@@ -79,7 +79,8 @@ class BBBPlugin extends Plugin
                         self::LAUNCH_TYPE_SET_BY_STUDENT => 'SetByStudent',
                     ],
                     'translate_options' => true, // variables will be translated using the plugin->get_lang
-                ]
+                ],
+                'allow_regenerate_recording' => 'boolean',
             ]
         );
 

+ 11 - 13
plugin/bbb/listing.php

@@ -62,6 +62,17 @@ if ($conferenceManager) {
                 $message = Display::return_message(get_lang('Error'), 'error');
             }
             break;
+        case 'regenerate_record':
+            if ($plugin->get('allow_regenerate_recording') !== 'true') {
+                api_not_allowed();
+            }
+            $result = $bbb->regenerateRecording($_GET['id'], $_GET['record_id']);
+            if ($result) {
+                $message = Display::return_message(get_lang('Success'), 'success');
+            } else {
+                $message = Display::return_message(get_lang('Error'), 'error');
+            }
+            break;
         case 'delete_record':
             $result = $bbb->deleteRecording($_GET['id']);
             if ($result) {
@@ -239,19 +250,6 @@ switch ($type) {
                 $meetinUserInfo = $bbb->getMeetingParticipantInfo($meetingInfo['id'], api_get_user_id());
                 $urlList = $plugin->getUrlInterfaceLinks($conferenceUrl);
                 $showClientOptions = true;
-
-                /*if (empty($meetinUserInfo)) {
-                    $url = $plugin->getUrlInterfaceLinks($conferenceUrl);
-                } else {
-                    switch ($meetinUserInfo['interface']) {
-                        case BBBPlugin::INTERFACE_FLASH:
-                            $url = $plugin->getFlashUrl($conferenceUrl);
-                            break;
-                        case BBBPlugin::INTERFACE_HTML5:
-                            $url = $plugin->getHtmlUrl($conferenceUrl);
-                            break;
-                    }
-                }*/
             }
         }