You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							105 lines
						
					
					
						
							4.1 KiB
						
					
					
				
			
		
		
	
	
							105 lines
						
					
					
						
							4.1 KiB
						
					
					
				<?php
 | 
						|
/* For licensing terms, see /license.txt */
 | 
						|
/**
 | 
						|
 * This script removes old BigBlueButton recordings from the database and disk.
 | 
						|
 * It uses parameters in order (all mandatory but the last one).
 | 
						|
 * Delete the exit; statement at line 13.
 | 
						|
 * This script should be located inside the tests/scripts/ folder to work.
 | 
						|
 * The script also generates output (which you should pipe to a file) with
 | 
						|
 * the list of internal-meeting-id's of the deleted recordings, so you can
 | 
						|
 * delete them from the BBB server.
 | 
						|
 * @author Yannick Warnier <yannick.warnier@beeznest.com>
 | 
						|
 */
 | 
						|
exit;
 | 
						|
require __DIR__.'/../../main/inc/global.inc.php';
 | 
						|
$simulate = false;
 | 
						|
 | 
						|
// Process script parameters
 | 
						|
if (PHP_SAPI !== 'cli') {
 | 
						|
    die('This script can only be executed from the command line');
 | 
						|
}
 | 
						|
 | 
						|
if (!empty($argv[1]) && $argv[1] == '--from') {
 | 
						|
    $from = $argv[2];
 | 
						|
}
 | 
						|
if (!empty($argv[3]) && $argv[3] == '--until') {
 | 
						|
    $until = $argv[4];
 | 
						|
}
 | 
						|
if (!empty($argv[5]) && $argv[5] == '-s') {
 | 
						|
    $simulate = true;
 | 
						|
    echo "Simulation mode is enabled".PHP_EOL;
 | 
						|
}
 | 
						|
if ($argc < 2 or empty($from) or empty($until)) {
 | 
						|
    echo PHP_EOL."Usage: sudo php ".basename(__FILE__)." [options]".PHP_EOL;
 | 
						|
    echo "Where [options] can be ".PHP_EOL;
 | 
						|
    echo "  --from yyyy-mm-dd    Date from which the content should be removed (e.g. 2017-08-31)".PHP_EOL.PHP_EOL;
 | 
						|
    echo "  --until yyyy-mm-dd   Date up to which the content should be removed (e.g. 2020-08-31)".PHP_EOL.PHP_EOL;
 | 
						|
    echo "  -s                   (optional) Simulate execution - Do not delete anything, just show numbers".PHP_EOL.PHP_EOL;
 | 
						|
    die('Please make sure --from and --until are defined.');
 | 
						|
}
 | 
						|
 | 
						|
echo "About to delete BigBlueButton recordings from $from to $until".PHP_EOL;
 | 
						|
 | 
						|
$settingsTable = Database::get_main_table(TABLE_MAIN_SETTINGS_CURRENT);
 | 
						|
$sql = "SELECT selected_value from $settingsTable WHERE variable = 'bbb_tool_enable'";
 | 
						|
$res = Database::query($sql);
 | 
						|
$row = Database::fetch_assoc($res);
 | 
						|
if ($row['selected_value'] != 'true') {
 | 
						|
    die('The BigBlueButton plugin must be enabled to execute this script.'.PHP_EOL);
 | 
						|
}
 | 
						|
 | 
						|
$return = deleteBBBRecordings($from, $until, $simulate);
 | 
						|
$commands = '';
 | 
						|
foreach ($return as $line) {
 | 
						|
    if (preg_match('/^bbb-record/', $line)) {
 | 
						|
        $commands .= $line;
 | 
						|
    } else {
 | 
						|
        echo $line;
 | 
						|
    }
 | 
						|
}
 | 
						|
echo '----------------'.PHP_EOL;
 | 
						|
echo $commands.PHP_EOL;
 | 
						|
 | 
						|
/**
 | 
						|
 * Delete all data from the BBB plugin table between the given dates and return a log string.
 | 
						|
 * @param string $from  'yyyy-mm-dd' format date from which to start deleting
 | 
						|
 * @param string $until 'yyyy-mm-dd' format date until which to delete
 | 
						|
 * @param bool   $simulate True if we only want to simulate the deletion and collect data
 | 
						|
 * @return array
 | 
						|
 */
 | 
						|
function deleteBBBRecordings(string $from, string $until, bool $simulate): array
 | 
						|
{
 | 
						|
    $log = [];
 | 
						|
    $size = 0;
 | 
						|
    if ($simulate) {
 | 
						|
        $log[] = 'Simulation mode ON'.PHP_EOL;
 | 
						|
    }
 | 
						|
    $table = 'plugin_bbb_meeting';
 | 
						|
    $tableFormat = 'plugin_bbb_meeting_format';
 | 
						|
    $tableRoom = 'plugin_bbb_room';
 | 
						|
    // Get the list of sessions where access_end_date is within the given range
 | 
						|
    $sessions = Database::select(
 | 
						|
        ['id', 'internal_meeting_id'],
 | 
						|
        $table,
 | 
						|
        [
 | 
						|
            'where' => ['closed_at > ? AND closed_at < ? AND record = 1 AND internal_meeting_id is not null' => [$from.' 00:00:00', $until.' 23:59:00']],
 | 
						|
        ]
 | 
						|
    );
 | 
						|
    $log[] = 'Found '.count($sessions).' recordings to delete'.PHP_EOL;
 | 
						|
    foreach ($sessions as $session) {
 | 
						|
        //$log[] = 'Deleting recording '.$session['id'].PHP_EOL;
 | 
						|
        if (!$simulate) {
 | 
						|
            $sqlDelete = 'DELETE FROM '.$tableRoom.' WHERE meeting_id = '.$session['id'];
 | 
						|
            $resDelete = Database::query($sqlDelete);
 | 
						|
            $sqlDelete = 'DELETE FROM '.$tableFormat.' WHERE meeting_id = '.$session['id'];
 | 
						|
            $resDelete = Database::query($sqlDelete);
 | 
						|
            $sqlDelete = 'DELETE FROM '.$table.' WHERE id = '.$session['id'];
 | 
						|
            $resDelete = Database::query($sqlDelete);
 | 
						|
        }
 | 
						|
        $log[] = 'bbb-record --delete '.$session['internal_meeting_id'].PHP_EOL;
 | 
						|
        $size++;
 | 
						|
    }
 | 
						|
    $log[] = 'Deleted '.$size.' recordings (and their content) in total.'.PHP_EOL;
 | 
						|
 | 
						|
    return $log;
 | 
						|
}
 | 
						|
 |