Plugin Directory

Changeset 3446509


Ignore:
Timestamp:
01/25/2026 11:46:41 AM (2 months ago)
Author:
elearningevolve
Message:

Release 2.5.2

Location:
video-conferencing-with-bbb
Files:
4 edited
22 copied

Legend:

Unmodified
Added
Removed
  • video-conferencing-with-bbb/tags/2.5.2/README.md

    r3285302 r3446509  
    55Tags: virtual classroom, video conference, BigBlueButton, BBB, online meeting, web conferencing, online teaching, learning management system, LMS, online session, live training, video conferencing, video conference, meetings, virtual meetings
    66Requires at least: 5.1 
    7 Tested up to: 6.8.1 
     7Tested up to: 6.9 
    88Requires PHP: 7.2 
    9 Stable tag: 2.5.1 
     9Stable tag: 2.5.2 
    1010License: GPLv2 or later 
    1111License URI: http://www.gnu.org/licenses/gpl-2.0.html 
     
    175175
    176176## Changelog ##
     177### 2.5.2 ###
     178* Fixed: Multiple recording buttons in the recording view
     179
    177180### 2.5.1 ###
    178181* Fixed: Fatal error in previous v2.5.0 update
  • video-conferencing-with-bbb/tags/2.5.2/public/helpers/class-bigbluebutton-recording-helper.php

    r2995474 r3446509  
    152152            usort(
    153153                $this->recordings,
    154                 function( $first, $second ) use ( $direction, $field, $self ) {
    155                     if ( $direction == 'asc' ) {
    156                         return ( strcasecmp( $self->get_recording_field( $first, $field ), $self->get_recording_field( $second, $field ) ) > 0 );
    157                     } else {
    158                         return ( strcasecmp( $self->get_recording_field( $first, $field ), $self->get_recording_field( $second, $field ) ) < 0 );
    159                     }
    160                 }
    161             );
     154                function ( $first, $second ) use ( $direction, $field, $self ) {
     155                $result = strcasecmp( $self->get_recording_field( $first, $field ), $self->get_recording_field( $second, $field ) );
     156                return ( $direction === 'asc' ) ? $result : -$result;
     157            }
     158        );
    162159
    163160        } else {
     
    166163            $field     = sanitize_text_field( 'date' );
    167164            $self      = $this;
     165            // var_dump($this->recordings); die;
    168166
    169167            usort(
    170168                $this->recordings,
    171                 function( $first, $second ) use ( $direction, $field, $self ) {
    172                     return ( strcasecmp( $self->get_recording_field( $first, $field ), $self->get_recording_field( $second, $field ) ) < 0 );
     169                function ( $first, $second ) use ( $direction, $field, $self ) {
     170                    $a = $self->get_recording_field( $first, $field );
     171                    $b = $self->get_recording_field( $second, $field );
     172
     173                    // Use spaceship operator for numeric or string comparison
     174                    if ( is_numeric( $a ) && is_numeric( $b ) ) {
     175                        $result = $a <=> $b; // numeric
     176                    } else {
     177                        $result = strcasecmp( (string) $a, (string) $b ); // string
     178                    }
     179
     180                    return ( $direction === 'desc' ) ? -$result : $result;
    173181                }
    174182            );
  • video-conferencing-with-bbb/tags/2.5.2/public/partials/bigbluebutton-recordings-display.php

    r3106211 r3446509  
    6060                    <?php endif; ?>
    6161                    <div class="flex-row flex-row-<?php echo esc_attr( $columns ); ?>" role="cell">
    62                         <?php echo esc_html( date_i18n( $date_format, (int) $recording->startTime / 1000 ) ); ?>
     62                    <?php echo esc_html( date_i18n( $date_format, (int) ( $recording->startTime / 1000 ) ) ); ?>
    6363                    </div>
    6464                    <div class="flex-row flex-row-<?php echo esc_attr( $columns ); ?>" role="cell">
     
    6969                                    $recording_url = trim( apply_filters( 'bbb_recording_url_display', $format->url, $format->type ) );
    7070                                    ?>
    71                                     <button class="bbb-button bbb-btn-join button button-primary" onclick="window.open('<?php echo esc_url( $recording_url ); ?>', '_blank')"><?php esc_html_e( 'View Recording', 'bigbluebutton' ); ?></button>
    72                                 <?php } ?>
     71                                    <button class="bbb-button bbb-btn-join button button-primary" onclick="window.open('<?php echo esc_url( $recording_url ); ?>', '_blank')"><?php esc_html_e( 'View Recording', 'bigbluebutton' ); ?></button>                                <?php break; // Show only the first format ?>                               <?php } ?>
    7372                            <?php } ?>
    7473                        </div>
  • video-conferencing-with-bbb/tags/2.5.2/video-conferencing-with-bbb.php

    r3285298 r3446509  
    1616 * Plugin URI:        https://wordpress.org/plugins/video-conferencing-with-bbb
    1717 * Description:       This plugin allows teachers to manage their virtual classrooms right from WordPress using BigBlueButton
    18  * Version:           2.5.1
     18 * Version:           2.5.2
    1919 * Author:            eLearning evolve <info@elearningevolve.com>
    2020 * Author URI:        https://elearningevolve.com/
     
    2424 * Domain Path:       /languages
    2525 */
    26 $plugin_version = '2.5.1';
     26$plugin_version = '2.5.2';
    2727$plugin_name    = 'Virtual Classroom & Video Conferencing - BigBlueButton';
    2828
     
    4848}
    4949
    50 /**
    51  * The code that runs during plugin activation.
    52  * This action is documented in includes/class-bigbluebutton-activator.php
    53  */
    54 function ee_activate_video_conf_with_bbb() {
    55     require_once plugin_dir_path( __FILE__ ) . 'includes/class-bigbluebutton-activator.php';
    56     Bigbluebutton_Activator::activate();
    57 }
    58 register_activation_hook( __FILE__, 'ee_activate_video_conf_with_bbb' );
    59 
    60 //add_action( 'admin_init', 'ee_activate_video_conf_with_bbb', 1 );
    61 
    62 /**
    63  * The code that runs during plugin deactivation.
    64  * This action is documented in includes/class-bigbluebutton-deactivator.php
    65  */
    66 // function deactivate_video_conf_bbb() {
    67 //  require_once plugin_dir_path( __FILE__ ) . 'includes/class-bigbluebutton-deactivator.php';
    68 //  Bigbluebutton_Deactivator::deactivate();
    69 // }
    70 //register_deactivation_hook( __FILE__, 'deactivate_video_conf_bbb' );
    71 
    72 // Show plugin conflict notice
     50// Show plugin conflict notice.
    7351add_action(
    7452    'admin_notices',
     
    7654        $notice = get_transient( 'video_conf_bbb_conflict_notice' );
    7755        if ( $notice ) {
    78             echo '<div class="error"><p>' . wp_kses( $notice, 'br' ) . '</p></div>';
     56            $allowed_html = array(
     57                'strong' => array(),
     58                'br'     => array(),
     59            );
     60            echo '<div class="error"><p>' . wp_kses( $notice, $allowed_html ) . '</p></div>';
    7961        }
    8062    }
     
    8264
    8365/**
    84  * Check plugin conflicts.
     66 * Check plugin conflicts (lightweight early check without translations).
     67 *
     68 * @return bool True if conflict detected, false otherwise.
     69 */
     70function video_conf_bbb_check_conflict_early() {
     71    $conflict_basenames = array(
     72        'bigbluebutton/bigbluebutton.php'                    => 'BigBlueButton',
     73        'bbb-administration-panel/bigbluebutton-plugin.php' => 'BBB Administration Panel',
     74    );
     75
     76    if ( ! function_exists( 'is_plugin_active' ) ) {
     77        include_once ABSPATH . 'wp-admin' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'plugin.php';
     78    }
     79
     80    // Check if we are already active.
     81    $we_are_active = is_plugin_active( plugin_basename( __FILE__ ) );
     82
     83    $deactivated_plugin = '';
     84
     85    foreach ( $conflict_basenames as $basename => $plugin_name ) {
     86        if ( is_plugin_active( $basename ) || is_plugin_active_for_network( $basename ) ) {
     87            $deactivated_plugin = $plugin_name;
     88
     89            // Deactivate conflicting plugin immediately.
     90            deactivate_plugins( $basename );
     91        }
     92    }
     93
     94    if ( $deactivated_plugin ) {
     95        // Set notice that we deactivated the conflicting plugin.
     96        set_transient( 'video_conf_bbb_conflict_notice', '<strong>Virtual Classroom & Video Conferencing</strong> has been activated. <strong>' . $deactivated_plugin . '</strong> plugin was automatically deactivated.', 5 );
     97        // Continue loading our plugin.
     98        return false;
     99    }
     100
     101    return false;
     102}
     103
     104/**
     105 * Check plugin conflicts (full check with detailed messages).
     106 *
     107 * @param bool $is_echo Whether to show notices.
     108 * @return bool|string False if no conflict, error message if conflict detected.
    85109 */
    86110function video_conf_bbb_check_conflict( $is_echo = true ) {
    87111
    88     $conflict_basenames = array( 'bigbluebutton/bigbluebutton.php', 'bbb-administration-panel/bigbluebutton-plugin.php' );
     112    $conflict_basenames = array(
     113        'bigbluebutton/bigbluebutton.php',
     114        'bbb-administration-panel/bigbluebutton-plugin.php',
     115    );
    89116
    90117    if ( ! function_exists( 'get_plugin_data' ) ) {
     
    95122        $conf_plugin_file = WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . $basename;
    96123        if ( file_exists( $conf_plugin_file ) ) {
    97             $plugin_data                   = get_plugin_data( $conf_plugin_file );
    98             $plugins[ $basename ]['msg']   = sprintf( __( '%1$s is not compatible with %2$s. Please deactivate %1$s before activating %2$s.', 'bigbluebutton' ), '<strong>' . esc_html( VIDEO_CONF_WITH_BBB_PLUGIN_NAME ) . '</strong>', '<strong> ' . esc_html( $plugin_data['Name'] ) . ' </strong>' );
     124            // Don't translate plugin data to avoid early text domain loading.
     125            $plugin_data                   = get_plugin_data( $conf_plugin_file, false, false );
     126            $plugins[ $basename ]['msg']   = sprintf( '%1$s is not compatible with %2$s. Please deactivate %1$s before activating %2$s.', '<strong>' . esc_html( VIDEO_CONF_WITH_BBB_PLUGIN_NAME ) . '</strong>', '<strong> ' . esc_html( $plugin_data['Name'] ) . ' </strong>' );
    99127            $plugins[ $basename ]['class'] = $plugin_data['Name'];
    100128        }
     
    126154}
    127155
     156// Early conflict check to prevent fatal errors during activation.
     157if ( video_conf_bbb_check_conflict_early() ) {
     158    // Conflict detected - stop loading completely.
     159    return;
     160}
     161
    128162/**
    129163 * The core plugin class that is used to define internationalization,
     
    131165 */
    132166require plugin_dir_path( __FILE__ ) . 'includes/class-bigbluebutton.php';
     167
     168/**
     169 * The code that runs during plugin activation.
     170 * This action is documented in includes/class-bigbluebutton-activator.php
     171 */
     172function ee_activate_video_conf_with_bbb() {
     173    require_once plugin_dir_path( __FILE__ ) . 'includes/class-bigbluebutton-activator.php';
     174    // Load the classes required by the activator.
     175    require_once plugin_dir_path( __FILE__ ) . 'includes/class-bigbluebutton-helper.php';
     176    require_once plugin_dir_path( __FILE__ ) . 'admin/helpers/class-bigbluebutton-admin-helper.php';
     177    require_once plugin_dir_path( __FILE__ ) . 'admin/class-bigbluebutton-register-custom-types.php';
     178    Bigbluebutton_Activator::activate();
     179}
     180register_activation_hook( __FILE__, 'ee_activate_video_conf_with_bbb' );
    133181
    134182/**
     
    141189 * @since    3.0.0
    142190 */
    143 if ( ! function_exists( 'run_video_conf_bbb' ) && ! video_conf_bbb_check_conflict() ) {
    144     function run_video_conf_bbb() {
    145         $plugin = new VideoConferencingWithBBB();
    146         $plugin->run();
    147     }
    148     run_video_conf_bbb();
    149 }
     191add_action(
     192    'plugins_loaded',
     193    function () {
     194        // Full conflict check with detailed messages.
     195        if ( ! function_exists( 'run_video_conf_bbb' ) && ! video_conf_bbb_check_conflict() ) {
     196            function run_video_conf_bbb() {
     197                $plugin = new VideoConferencingWithBBB();
     198                $plugin->run();
     199            }
     200            run_video_conf_bbb();
     201        }
     202    }
     203);
     204
  • video-conferencing-with-bbb/trunk/README.md

    r3285302 r3446509  
    55Tags: virtual classroom, video conference, BigBlueButton, BBB, online meeting, web conferencing, online teaching, learning management system, LMS, online session, live training, video conferencing, video conference, meetings, virtual meetings
    66Requires at least: 5.1 
    7 Tested up to: 6.8.1 
     7Tested up to: 6.9 
    88Requires PHP: 7.2 
    9 Stable tag: 2.5.1 
     9Stable tag: 2.5.2 
    1010License: GPLv2 or later 
    1111License URI: http://www.gnu.org/licenses/gpl-2.0.html 
     
    175175
    176176## Changelog ##
     177### 2.5.2 ###
     178* Fixed: Multiple recording buttons in the recording view
     179
    177180### 2.5.1 ###
    178181* Fixed: Fatal error in previous v2.5.0 update
  • video-conferencing-with-bbb/trunk/public/helpers/class-bigbluebutton-recording-helper.php

    r2995474 r3446509  
    152152            usort(
    153153                $this->recordings,
    154                 function( $first, $second ) use ( $direction, $field, $self ) {
    155                     if ( $direction == 'asc' ) {
    156                         return ( strcasecmp( $self->get_recording_field( $first, $field ), $self->get_recording_field( $second, $field ) ) > 0 );
    157                     } else {
    158                         return ( strcasecmp( $self->get_recording_field( $first, $field ), $self->get_recording_field( $second, $field ) ) < 0 );
    159                     }
    160                 }
    161             );
     154                function ( $first, $second ) use ( $direction, $field, $self ) {
     155                $result = strcasecmp( $self->get_recording_field( $first, $field ), $self->get_recording_field( $second, $field ) );
     156                return ( $direction === 'asc' ) ? $result : -$result;
     157            }
     158        );
    162159
    163160        } else {
     
    166163            $field     = sanitize_text_field( 'date' );
    167164            $self      = $this;
     165            // var_dump($this->recordings); die;
    168166
    169167            usort(
    170168                $this->recordings,
    171                 function( $first, $second ) use ( $direction, $field, $self ) {
    172                     return ( strcasecmp( $self->get_recording_field( $first, $field ), $self->get_recording_field( $second, $field ) ) < 0 );
     169                function ( $first, $second ) use ( $direction, $field, $self ) {
     170                    $a = $self->get_recording_field( $first, $field );
     171                    $b = $self->get_recording_field( $second, $field );
     172
     173                    // Use spaceship operator for numeric or string comparison
     174                    if ( is_numeric( $a ) && is_numeric( $b ) ) {
     175                        $result = $a <=> $b; // numeric
     176                    } else {
     177                        $result = strcasecmp( (string) $a, (string) $b ); // string
     178                    }
     179
     180                    return ( $direction === 'desc' ) ? -$result : $result;
    173181                }
    174182            );
  • video-conferencing-with-bbb/trunk/public/partials/bigbluebutton-recordings-display.php

    r3106211 r3446509  
    6060                    <?php endif; ?>
    6161                    <div class="flex-row flex-row-<?php echo esc_attr( $columns ); ?>" role="cell">
    62                         <?php echo esc_html( date_i18n( $date_format, (int) $recording->startTime / 1000 ) ); ?>
     62                    <?php echo esc_html( date_i18n( $date_format, (int) ( $recording->startTime / 1000 ) ) ); ?>
    6363                    </div>
    6464                    <div class="flex-row flex-row-<?php echo esc_attr( $columns ); ?>" role="cell">
     
    6969                                    $recording_url = trim( apply_filters( 'bbb_recording_url_display', $format->url, $format->type ) );
    7070                                    ?>
    71                                     <button class="bbb-button bbb-btn-join button button-primary" onclick="window.open('<?php echo esc_url( $recording_url ); ?>', '_blank')"><?php esc_html_e( 'View Recording', 'bigbluebutton' ); ?></button>
    72                                 <?php } ?>
     71                                    <button class="bbb-button bbb-btn-join button button-primary" onclick="window.open('<?php echo esc_url( $recording_url ); ?>', '_blank')"><?php esc_html_e( 'View Recording', 'bigbluebutton' ); ?></button>                                <?php break; // Show only the first format ?>                               <?php } ?>
    7372                            <?php } ?>
    7473                        </div>
  • video-conferencing-with-bbb/trunk/video-conferencing-with-bbb.php

    r3285298 r3446509  
    1616 * Plugin URI:        https://wordpress.org/plugins/video-conferencing-with-bbb
    1717 * Description:       This plugin allows teachers to manage their virtual classrooms right from WordPress using BigBlueButton
    18  * Version:           2.5.1
     18 * Version:           2.5.2
    1919 * Author:            eLearning evolve <info@elearningevolve.com>
    2020 * Author URI:        https://elearningevolve.com/
     
    2424 * Domain Path:       /languages
    2525 */
    26 $plugin_version = '2.5.1';
     26$plugin_version = '2.5.2';
    2727$plugin_name    = 'Virtual Classroom & Video Conferencing - BigBlueButton';
    2828
     
    4848}
    4949
    50 /**
    51  * The code that runs during plugin activation.
    52  * This action is documented in includes/class-bigbluebutton-activator.php
    53  */
    54 function ee_activate_video_conf_with_bbb() {
    55     require_once plugin_dir_path( __FILE__ ) . 'includes/class-bigbluebutton-activator.php';
    56     Bigbluebutton_Activator::activate();
    57 }
    58 register_activation_hook( __FILE__, 'ee_activate_video_conf_with_bbb' );
    59 
    60 //add_action( 'admin_init', 'ee_activate_video_conf_with_bbb', 1 );
    61 
    62 /**
    63  * The code that runs during plugin deactivation.
    64  * This action is documented in includes/class-bigbluebutton-deactivator.php
    65  */
    66 // function deactivate_video_conf_bbb() {
    67 //  require_once plugin_dir_path( __FILE__ ) . 'includes/class-bigbluebutton-deactivator.php';
    68 //  Bigbluebutton_Deactivator::deactivate();
    69 // }
    70 //register_deactivation_hook( __FILE__, 'deactivate_video_conf_bbb' );
    71 
    72 // Show plugin conflict notice
     50// Show plugin conflict notice.
    7351add_action(
    7452    'admin_notices',
     
    7654        $notice = get_transient( 'video_conf_bbb_conflict_notice' );
    7755        if ( $notice ) {
    78             echo '<div class="error"><p>' . wp_kses( $notice, 'br' ) . '</p></div>';
     56            $allowed_html = array(
     57                'strong' => array(),
     58                'br'     => array(),
     59            );
     60            echo '<div class="error"><p>' . wp_kses( $notice, $allowed_html ) . '</p></div>';
    7961        }
    8062    }
     
    8264
    8365/**
    84  * Check plugin conflicts.
     66 * Check plugin conflicts (lightweight early check without translations).
     67 *
     68 * @return bool True if conflict detected, false otherwise.
     69 */
     70function video_conf_bbb_check_conflict_early() {
     71    $conflict_basenames = array(
     72        'bigbluebutton/bigbluebutton.php'                    => 'BigBlueButton',
     73        'bbb-administration-panel/bigbluebutton-plugin.php' => 'BBB Administration Panel',
     74    );
     75
     76    if ( ! function_exists( 'is_plugin_active' ) ) {
     77        include_once ABSPATH . 'wp-admin' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'plugin.php';
     78    }
     79
     80    // Check if we are already active.
     81    $we_are_active = is_plugin_active( plugin_basename( __FILE__ ) );
     82
     83    $deactivated_plugin = '';
     84
     85    foreach ( $conflict_basenames as $basename => $plugin_name ) {
     86        if ( is_plugin_active( $basename ) || is_plugin_active_for_network( $basename ) ) {
     87            $deactivated_plugin = $plugin_name;
     88
     89            // Deactivate conflicting plugin immediately.
     90            deactivate_plugins( $basename );
     91        }
     92    }
     93
     94    if ( $deactivated_plugin ) {
     95        // Set notice that we deactivated the conflicting plugin.
     96        set_transient( 'video_conf_bbb_conflict_notice', '<strong>Virtual Classroom & Video Conferencing</strong> has been activated. <strong>' . $deactivated_plugin . '</strong> plugin was automatically deactivated.', 5 );
     97        // Continue loading our plugin.
     98        return false;
     99    }
     100
     101    return false;
     102}
     103
     104/**
     105 * Check plugin conflicts (full check with detailed messages).
     106 *
     107 * @param bool $is_echo Whether to show notices.
     108 * @return bool|string False if no conflict, error message if conflict detected.
    85109 */
    86110function video_conf_bbb_check_conflict( $is_echo = true ) {
    87111
    88     $conflict_basenames = array( 'bigbluebutton/bigbluebutton.php', 'bbb-administration-panel/bigbluebutton-plugin.php' );
     112    $conflict_basenames = array(
     113        'bigbluebutton/bigbluebutton.php',
     114        'bbb-administration-panel/bigbluebutton-plugin.php',
     115    );
    89116
    90117    if ( ! function_exists( 'get_plugin_data' ) ) {
     
    95122        $conf_plugin_file = WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . $basename;
    96123        if ( file_exists( $conf_plugin_file ) ) {
    97             $plugin_data                   = get_plugin_data( $conf_plugin_file );
    98             $plugins[ $basename ]['msg']   = sprintf( __( '%1$s is not compatible with %2$s. Please deactivate %1$s before activating %2$s.', 'bigbluebutton' ), '<strong>' . esc_html( VIDEO_CONF_WITH_BBB_PLUGIN_NAME ) . '</strong>', '<strong> ' . esc_html( $plugin_data['Name'] ) . ' </strong>' );
     124            // Don't translate plugin data to avoid early text domain loading.
     125            $plugin_data                   = get_plugin_data( $conf_plugin_file, false, false );
     126            $plugins[ $basename ]['msg']   = sprintf( '%1$s is not compatible with %2$s. Please deactivate %1$s before activating %2$s.', '<strong>' . esc_html( VIDEO_CONF_WITH_BBB_PLUGIN_NAME ) . '</strong>', '<strong> ' . esc_html( $plugin_data['Name'] ) . ' </strong>' );
    99127            $plugins[ $basename ]['class'] = $plugin_data['Name'];
    100128        }
     
    126154}
    127155
     156// Early conflict check to prevent fatal errors during activation.
     157if ( video_conf_bbb_check_conflict_early() ) {
     158    // Conflict detected - stop loading completely.
     159    return;
     160}
     161
    128162/**
    129163 * The core plugin class that is used to define internationalization,
     
    131165 */
    132166require plugin_dir_path( __FILE__ ) . 'includes/class-bigbluebutton.php';
     167
     168/**
     169 * The code that runs during plugin activation.
     170 * This action is documented in includes/class-bigbluebutton-activator.php
     171 */
     172function ee_activate_video_conf_with_bbb() {
     173    require_once plugin_dir_path( __FILE__ ) . 'includes/class-bigbluebutton-activator.php';
     174    // Load the classes required by the activator.
     175    require_once plugin_dir_path( __FILE__ ) . 'includes/class-bigbluebutton-helper.php';
     176    require_once plugin_dir_path( __FILE__ ) . 'admin/helpers/class-bigbluebutton-admin-helper.php';
     177    require_once plugin_dir_path( __FILE__ ) . 'admin/class-bigbluebutton-register-custom-types.php';
     178    Bigbluebutton_Activator::activate();
     179}
     180register_activation_hook( __FILE__, 'ee_activate_video_conf_with_bbb' );
    133181
    134182/**
     
    141189 * @since    3.0.0
    142190 */
    143 if ( ! function_exists( 'run_video_conf_bbb' ) && ! video_conf_bbb_check_conflict() ) {
    144     function run_video_conf_bbb() {
    145         $plugin = new VideoConferencingWithBBB();
    146         $plugin->run();
    147     }
    148     run_video_conf_bbb();
    149 }
     191add_action(
     192    'plugins_loaded',
     193    function () {
     194        // Full conflict check with detailed messages.
     195        if ( ! function_exists( 'run_video_conf_bbb' ) && ! video_conf_bbb_check_conflict() ) {
     196            function run_video_conf_bbb() {
     197                $plugin = new VideoConferencingWithBBB();
     198                $plugin->run();
     199            }
     200            run_video_conf_bbb();
     201        }
     202    }
     203);
     204
Note: See TracChangeset for help on using the changeset viewer.