Merge branch 'master' of github.com:bigbluebutton/bigbluebutton

This commit is contained in:
Richard Alam 2010-09-03 14:54:36 -04:00
commit b77a8f46ca
37 changed files with 859 additions and 359 deletions

View File

@ -1,9 +1,31 @@
<?php <?php
/*
Copyright 2010 Blindside Networks
if(function_exists("curl_init()")) This program is free software; you can redistribute it and/or modify
{ it under the terms of the GNU General Public License as published by
function bbb_wrap_simplexml_load_file($url) the Free Software Foundation; either version 2 of the License, or
{ (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Versions:
1.0 -- Initial version written by DJP
(email: djp [a t ] architectes DOT .org)
1.1 -- Updated by Omar Shammas and Sebastian Schneider
(email : omar DOT shammas [a t ] g m ail DOT com)
(email : seb DOT sschneider [ a t ] g m ail DOT com)
*/
function bbb_wrap_simplexml_load_file($url){
if(function_exists("curl_init()")){
$ch = curl_init() or die ( curl_error() ); $ch = curl_init() or die ( curl_error() );
$timeout = 10; $timeout = 10;
curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_URL, $url );
@ -13,17 +35,9 @@ if(function_exists("curl_init()"))
curl_close( $ch ); curl_close( $ch );
return (new SimpleXMLElement($data)); return (new SimpleXMLElement($data));
} }
} else{
else return (simplexml_load_file($url));
{ }
/*
* REQUIREMENT - PHP.INI
* allow_url_fopen = On
*/
function bbb_wrap_simplexml_load_file($url)
{
return (simplexml_load_file($url));
}
} }
/* /*
@ -119,12 +133,12 @@ else
} }
} }
public function createMeeting( $username, $meetingID, $welcomeString, $mPW, $aPW, $SALT, $URL, $logoutURL ) { public function createMeetingReturnJoinURL( $username, $meetingID, $meetingName, $welcomeString, $mPW, $aPW, $SALT, $URL, $logoutURL ) {
$url_create = $URL."api/create?"; $url_create = $URL."api/create?";
$url_join = $URL."api/join?"; $url_join = $URL."api/join?";
$voiceBridge = 70000 + rand(0, 9999); $voiceBridge = 70000 + rand(0, 9999);
$params = 'name='.urlencode($username).'&meetingID='.urlencode($meetingID).'&attendeePW='.$aPW.'&moderatorPW='.$mPW.'&voiceBridge='.$voiceBridge.'&logoutURL='.urlencode($logoutURL); $params = 'name='.urlencode($meetingName).'&meetingID='.urlencode($meetingID).'&attendeePW='.$aPW.'&moderatorPW='.$mPW.'&voiceBridge='.$voiceBridge.'&logoutURL='.urlencode($logoutURL);
if( trim( $welcomeString ) ) if( trim( $welcomeString ) )
$params .= '&welcome='.urlencode($welcomeString); $params .= '&welcome='.urlencode($welcomeString);
@ -143,7 +157,7 @@ public function createMeeting( $username, $meetingID, $welcomeString, $mPW, $aPW
} }
} }
public function createMeetingXML( $username, $meetingID, $welcomeString, $mPW, $aPW, $SALT, $URL, $logoutURL ) { public function createMeetingArray( $username, $meetingID, $welcomeString, $mPW, $aPW, $SALT, $URL, $logoutURL ) {
$url_create = $URL."api/create?"; $url_create = $URL."api/create?";
$url_join = $URL."api/join?"; $url_join = $URL."api/join?";
$voiceBridge = 70000 + rand(0, 9999); $voiceBridge = 70000 + rand(0, 9999);
@ -202,18 +216,17 @@ public function getMeetingInfo( $meetingID, $modPW, $URL, $SALT ) {
public function getMeetingInfoArray( $meetingID, $modPW, $URL, $SALT ) { public function getMeetingInfoArray( $meetingID, $modPW, $URL, $SALT ) {
$xml = bbb_wrap_simplexml_load_file( BigBlueButton::getUrlFromMeetingInfo( $meetingID, $modPW, $URL, $SALT ) ); $xml = bbb_wrap_simplexml_load_file( BigBlueButton::getUrlFromMeetingInfo( $meetingID, $modPW, $URL, $SALT ) );
if( $xml && $xml->returncode == 'SUCCESS' && $xml->messageKey == null){//The meetings were returned if( $xml && $xml->returncode == 'SUCCESS' && $xml->messageKey == null){//The meetings were returned
return array('returncode' => $xml->returncode, 'message' => $xml->message, 'messageKey' => $xml->messageKey ); return array('returncode' => $xml->returncode, 'message' => $xml->message, 'messageKey' => $xml->messageKey );
} }
else if($xml && $xml->returncode == 'SUCCESS'){ //If there were meetings already created else if($xml && $xml->returncode == 'SUCCESS'){ //If there were meetings already created
return array( 'meetingID' => $xml->meetingID, 'moderatorPW' => $xml->moderatorPW, 'attendeePW' => $xml->attendeePW, 'hasBeenForciblyEnded' => $xml->hasBeenForciblyEnded, 'running' => $xml->running, 'startTime' => $xml->startTime, 'endTime' => $xml->endTime, 'participantCount' => $xml->participantCount, 'moderatorCount' => $xml->moderatorCount, 'attendees' => $xml->attendees ); return array( 'meetingID' => $xml->meetingID, 'moderatorPW' => $xml->moderatorPW, 'attendeePW' => $xml->attendeePW, 'hasBeenForciblyEnded' => $xml->hasBeenForciblyEnded, 'running' => $xml->running, 'startTime' => $xml->startTime, 'endTime' => $xml->endTime, 'participantCount' => $xml->participantCount, 'moderatorCount' => $xml->moderatorCount, 'attendees' => $xml->attendees );
} }
else if( $xml ) { //If the xml packet returned failure it displays the message to the user else if( $xml ) { //If the xml packet returned failure it displays the message to the user
return array('returncode' => $xml->returncode, 'message' => $xml->message, 'messageKey' => $xml->messageKey);
return array('returncode' => $xml->returncode, 'message' => $xml->message, 'messageKey' => $xml->messageKey); }
} else { //If the server is unreachable, then prompts the user of the necessary action
else { //If the server is unreachable, then prompts the user of the necessary action return null;
return null; }
}
} }

View File

@ -44,6 +44,7 @@
<module application="src/BigBlueButton.mxml" destPath="ChatModule.swf" optimize="true" sourcePath="src/ChatModule.mxml"/> <module application="src/BigBlueButton.mxml" destPath="ChatModule.swf" optimize="true" sourcePath="src/ChatModule.mxml"/>
<module application="src/BigBlueButton.mxml" destPath="ListenersModule.swf" optimize="true" sourcePath="src/ListenersModule.mxml"/> <module application="src/BigBlueButton.mxml" destPath="ListenersModule.swf" optimize="true" sourcePath="src/ListenersModule.mxml"/>
<module application="src/BigBlueButton.mxml" destPath="WhiteboardModule.swf" optimize="true" sourcePath="src/WhiteboardModule.mxml"/> <module application="src/BigBlueButton.mxml" destPath="WhiteboardModule.swf" optimize="true" sourcePath="src/WhiteboardModule.mxml"/>
<module application="src/BigBlueButton.mxml" destPath="BreakoutModule.swf" optimize="true" sourcePath="src/BreakoutModule.mxml"/>
</modules> </modules>
<buildCSSFiles> <buildCSSFiles>
<buildCSSFileEntry destPath="bin" sourcePath="src/branding/css/theme.css"/> <buildCSSFileEntry destPath="bin" sourcePath="src/branding/css/theme.css"/>

View File

@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<flexProperties flexServerType="0" toolCompile="true" useServerFlexSDK="false" version="1"/> <flexProperties enableServiceManager="false" flexServerFeatures="0" flexServerType="0" toolCompile="true" useServerFlexSDK="false" version="1"/>

2
bigbluebutton-client/.gitignore vendored Normal file → Executable file
View File

@ -1,5 +1,3 @@
.actionScriptProperties
.flexProperties
linker-report.xml linker-report.xml
bin bin
client client

View File

@ -25,6 +25,7 @@
<property name="VIDEO" value="VideoconfModule" /> <property name="VIDEO" value="VideoconfModule" />
<property name="WHITEBOARD" value="WhiteboardModule" /> <property name="WHITEBOARD" value="WhiteboardModule" />
<property name="DYN_INFO" value="DynamicInfoModule" /> <property name="DYN_INFO" value="DynamicInfoModule" />
<property name="BREAKOUT" value="BreakoutModule" />
<property name="AVAILABLE_LOCALES" value="az_AZ,bg_BG,de_DE,el_GR,en_US,es_ES,es_LA,fr_FR,fr_CA,hu_HU,it_IT,lt_LT,nb_NO,nl_NL,pl_PL,pt_BR,pt_PT,ro_RO,ru_RU,tr_TR,vi_VN,zh_CN,zh_TW,sv_SE,fa_IR,ja_JP"/> <property name="AVAILABLE_LOCALES" value="az_AZ,bg_BG,de_DE,el_GR,en_US,es_ES,es_LA,fr_FR,fr_CA,hu_HU,it_IT,lt_LT,nb_NO,nl_NL,pl_PL,pt_BR,pt_PT,ro_RO,ru_RU,tr_TR,vi_VN,zh_CN,zh_TW,sv_SE,fa_IR,ja_JP"/>
@ -100,6 +101,8 @@
<target-player>10.0.0</target-player> <target-player>10.0.0</target-player>
<source-path path-element="locale/{locale}"/> <source-path path-element="locale/{locale}"/>
<include-resource-bundles>bbbResources</include-resource-bundles> <include-resource-bundles>bbbResources</include-resource-bundles>
<include-resource-bundles>core</include-resource-bundles>
<include-resource-bundles>controls</include-resource-bundles>
<source-path path-element="${FLEX_HOME}/frameworks"/> <source-path path-element="${FLEX_HOME}/frameworks"/>
</mxmlc> </mxmlc>
</sequential> </sequential>
@ -114,6 +117,10 @@
</copy> </copy>
</target> </target>
<target name="build-breakout" description="Compile Breakout Module" >
<build-module src="${SRC_DIR}" target="${BREAKOUT}" />
</target>
<target name="build-chat" description="Compile Chat Module"> <target name="build-chat" description="Compile Chat Module">
<build-module src="${SRC_DIR}" target="${CHAT}" /> <build-module src="${SRC_DIR}" target="${CHAT}" />
</target> </target>
@ -169,8 +176,8 @@
<!-- just a grouping of modules to compile --> <!-- just a grouping of modules to compile -->
<target name="build-main-chat-viewers-listeners-present" <target name="build-main-chat-viewers-listeners-present"
depends="build-bbb-main, build-chat, build-viewers, build-listeners, build-present" depends="build-bbb-main, build-chat, build-viewers, build-listeners, build-present, build-breakout"
description="Compile main, chat, viewers, listeners, present modules"> description="Compile main, chat, viewers, listeners, present, breakout modules">
</target> </target>
<!-- just a grouping of modules to compile --> <!-- just a grouping of modules to compile -->
@ -323,7 +330,7 @@
description="Build BBB client skipping compiling of locales"/> description="Build BBB client skipping compiling of locales"/>
<target name="clean-build-all" depends="clean, generate-html-wrapper, localization, compile-deskshare-standalone, compile-bbb" <target name="clean-build-all" depends="clean, generate-html-wrapper, localization, compile-deskshare-standalone, compile-bbb"
description="Build BBB client including locales"/> description="Build BBB client including locales"/>
<target name="build-bbb" depends="init-ant-contrib, generate-html-wrapper, compile-deskshare-standalone, compile-bbb" <target name="modules" depends="init-ant-contrib, generate-html-wrapper, compile-deskshare-standalone, compile-bbb"
description="Build BBB client without locales"/> description="Build BBB client without locales"/>
<target name="cleanandmake" depends="clean-build-all" description="Build BBB client including locales"/> <target name="cleanandmake" depends="clean-build-all" description="Build BBB client including locales"/>
</project> </project>

View File

@ -1,5 +1,6 @@
## BigBlueButton.mxml
bbb.pageTitle = BigBlueButton
# BigBlueButton.mxml
bbb.pageTitle = BigBlueButton bbb.pageTitle = BigBlueButton
# MainApplicationShell.mxml # MainApplicationShell.mxml
@ -8,13 +9,13 @@ bbb.mainshell.statusProgress.connecting = Свързване със сървър
bbb.mainshell.statusProgress.loading = Зареждане на {0} модул/а bbb.mainshell.statusProgress.loading = Зареждане на {0} модул/а
bbb.mainshell.statusProgress.cannotConnectServer = Съжалявам, не мога да се свържа със сървърът. bbb.mainshell.statusProgress.cannotConnectServer = Съжалявам, не мога да се свържа със сървърът.
bbb.mainshell.copyrightLabel2 = (c) 2010, BigBlueButton build {0} - За повече информация вижте http://www.bigbluebutton.org/. bbb.mainshell.copyrightLabel2 = (c) 2010, BigBlueButton build {0} - За повече информация вижте http://www.bigbluebutton.org/.
bbb.mainshell.logBtn.toolTip = Отвори Дневник Прозорцът bbb.mainshell.logBtn.toolTip = Отвори Дневник Прозорецът
bbb.mainshell.fullScreenBtn.toolTip = Премини на Цял Екран bbb.mainshell.fullScreenBtn.toolTip = Премини на Цял Екран
bbb.mainshell.resetLayoutBtn.toolTip = Презареди Изгледа bbb.mainshell.resetLayoutBtn.toolTip = Презареди Изгледа
# OldLocaleWarnWIndow.mxml # OldLocaleWarnWIndow.mxml
bbb.oldlocalewindow.reminder1=Вие може да имате стар превод на BigBlueButton. bbb.oldlocalewindow.reminder1=Вие може да имате стар превод на BigBlueButton.
bbb.oldlocalewindow.reminder2=Моля изчистете кеша на браузера си и опитайте отново. bbb.oldlocalewindow.reminder2=Моля изчистете кеша на браузъра си и опитайте отново.
bbb.oldlocalewindow.windowTitle=Предупреждение: Стар превод на езика bbb.oldlocalewindow.windowTitle=Предупреждение: Стар превод на езика
# LogWindow.mxml # LogWindow.mxml
@ -47,7 +48,7 @@ bbb.viewers.viewersGrid.statusItemRenderer = Състояние
bbb.viewers.viewersGrid.statusItemRenderer.raiseHand.toolTip = Вдигната ръка на {0} bbb.viewers.viewersGrid.statusItemRenderer.raiseHand.toolTip = Вдигната ръка на {0}
bbb.viewers.viewersGrid.statusItemRenderer.streamIcon.toolTip = Натисни за да видиш. bbb.viewers.viewersGrid.statusItemRenderer.streamIcon.toolTip = Натисни за да видиш.
bbb.viewers.viewersGrid.statusItemRenderer.presIcon.toolTip = Презентатор bbb.viewers.viewersGrid.statusItemRenderer.presIcon.toolTip = Презентатор
bbb.viewers.presentBtn.toolTip = Изберете кои уеб учстници да са презентатори. bbb.viewers.presentBtn.toolTip = Изберете кои уеб участници да са презентатори.
bbb.viewers.raiseHandBtn.toolTip = Натисни за да вдигнеш ръка. bbb.viewers.raiseHandBtn.toolTip = Натисни за да вдигнеш ръка.
bbb.viewers.presentBtn.label = Смени Презентаторът bbb.viewers.presentBtn.label = Смени Презентаторът
bbb.viewers.kickUserBtn.toolTip = Изхвърли потребител bbb.viewers.kickUserBtn.toolTip = Изхвърли потребител
@ -62,7 +63,7 @@ bbb.presentation.slideNumLbl =
bbb.presentation.forwardBtn.toolTip = Следваща страница bbb.presentation.forwardBtn.toolTip = Следваща страница
bbb.presentation.resetZoomBtn.toolTip = Презареди Мащаба bbb.presentation.resetZoomBtn.toolTip = Презареди Мащаба
bbb.presentation.presenterNameLbl = {0} текущо презентират. bbb.presentation.presenterNameLbl = {0} текущо презентират.
bbb.presentation.maximizeRestoreBtn.toolTip = Увелечете този прозорец bbb.presentation.maximizeRestoreBtn.toolTip = Увеличете този прозорец
bbb.presentation.maximizeRestoreBtn.toolTip2 = Възстановяване на предишният размер bbb.presentation.maximizeRestoreBtn.toolTip2 = Възстановяване на предишният размер
bbb.presentation.clickToUpload = Зареди презентация bbb.presentation.clickToUpload = Зареди презентация
bbb.presentation.maxUploadFileExceededAlert = Грешка: Файлът е по-голям от позволеното. bbb.presentation.maxUploadFileExceededAlert = Грешка: Файлът е по-голям от позволеното.

View File

@ -1,183 +1,177 @@
# BigBlueButton.mxml # BigBlueButton.mxml
bbb.pageTitle =BigBlueButton bbb.pageTitle = BigBlueButton
# MainApplicationShell.mxml # MainApplicationShell.mxml
bbb.mainshell.locale.version=0.7 bbb.mainshell.locale.version=0.7
bbb.mainshell.statusInfo =しばらくお待ちください。{0} モジュールを読み込み中・・・ bbb.mainshell.statusProgress.connecting = サーバーに接続中
bbb.mainshell.statusInfo.loaded ={0}読み込み完了 bbb.mainshell.statusProgress.loading = {0} つのモジュールをロード中
bbb.mainshell.statusInfo.testRTMPConnection =しばらくお待ちください。サーバへのコネクションをテスト中です。 bbb.mainshell.statusProgress.cannotConnectServer = サーバーに接続することができません。
bbb.mainshell.statusInfo2 =ご注意:もし読み込みがストップした場合、ご使用のブラウザのキャッシュを削除した後、再度実行してみてください。 bbb.mainshell.copyrightLabel2 = (c) 2010, BigBlueButton build {0} - For more information see http://www.bigbluebutton.org/.
bbb.mainshell.statusProgress.testRTMPConnection =RTMP://{0}:1935/{1}への接続 bbb.mainshell.logBtn.toolTip = ログのウィンドウ
bbb.mainshell.statusProgress.testRTMPTConnection =RTMP://{0}:80/{1}への接続 bbb.mainshell.fullScreenBtn.toolTip = フルスクリーン
bbb.mainshell.statusProgress.loading =読み込み中... bbb.mainshell.resetLayoutBtn.toolTip = レイアウトを戻す
bbb.mainshell.statusProgress.loaded =読み込み中・・・ {0} {1}% が読み込まれました。
bbb.mainshell.statusProgress.cannotConnectServer =申し訳ありません。サーバーに接続できません。
bbb.mainshell.copyrightLabel2 =(c) 2010, BigBlueButton build {0} - 詳細につきましては、http://www.bigbluebutton.org/をご覧ください。
bbb.mainshell.logBtn.toolTip =ログウィンドウを開く
bbb.mainshell.fullScreenBtn.toolTip =フルスクリーンで見る
bbb.mainshell.resetLayoutBtn.toolTip =レイアウトをリセット
# OldLocaleWarnWIndow.mxml # OldLocaleWarnWIndow.mxml
bbb.oldlocalewindow.reminder1=BigBlueButtonの古い言語翻訳を使用しているようです。 bbb.oldlocalewindow.reminder1=あなたはBigBlueButtonの古い翻訳を持つことができます。
bbb.oldlocalewindow.reminder2=ご使用のブラウザのキャッシュを削除した後、再度実行してみてください。 bbb.oldlocalewindow.reminder2=ブラウザのキャッシュを削除してからもう一度試してください。
bbb.oldlocalewindow.windowTitle=警告:古い言語翻訳 bbb.oldlocalewindow.windowTitle=Warning: 古い翻訳です。
# LogWindow.mxml # LogWindow.mxml
bbb.logwindow.title =ログウィンドウ bbb.logwindow.title = ログウィンドウ
bbb.logwindow.highlight =ハイライト: bbb.logwindow.highlight = Highlight:
bbb.logwindow.turnLoggingOff =ログ作業オフ bbb.logwindow.turnLoggingOff = ログをオフにします。
bbb.logwindow.clearBtn =クリア bbb.logwindow.clearBtn = 削除
bbb.logwindow.refreshBtn =更新 bbb.logwindow.refreshBtn = 最新の情報に更新
# JoinFailedWindow.mxml # JoinFailedWindow.mxml
bbb.joinFailedWindow.title =参加に失敗しました bbb.joinFailedWindow.title = 接続に失敗しました。
bbb.joinFailedWindow.okBtn =OK bbb.joinFailedWindow.okBtn = OK
bbb.joinFailedWindow.failedInfo =有効なセッションがありません。[OK]をクリックしてログインしてください。 bbb.joinFailedWindow.failedInfo = 有効なセッションがありません。 ログインするためにOKにクリックしてください。
# MainToolbar.mxml # MainToolbar.mxml
bbb.mainToolbar.loggedInUserLbl ={1}: ダイヤル: 613-520-7610 85115 bbb.mainToolbar.loggedInUserLbl = {1}: Dial: 613-520-7610 85115
bbb.mainToolbar.helpBtn =ヘルプ bbb.mainToolbar.helpBtn = ヘルプ
bbb.mainToolbar.logoutBtn =ログアウト bbb.mainToolbar.logoutBtn = ログアウト
bbb.mainToolbar.logoutBtn.toolTip =ログアウト bbb.mainToolbar.logoutBtn.toolTip = ログアウト
###### modules ###### ###### modules ######
# ViewersWindow.mxml # ViewersWindow.mxml
bbb.viewers.title =ユーザー{0} {1} bbb.viewers.title = ユーザー数{0} {1}
bbb.viewers.viewersGrid.nameItemRenderer =名前 bbb.viewers.viewersGrid.nameItemRenderer = 名前
bbb.viewers.viewersGrid.nameItemRenderer.nameLabel.toolTip =あなたはこのユーザーとしてログインしています。 bbb.viewers.viewersGrid.nameItemRenderer.nameLabel.toolTip = あなたはこのユーザとしてログインします。
bbb.viewers.viewersGrid.roleItemRenderer =役割 bbb.viewers.viewersGrid.roleItemRenderer = 権限
bbb.viewers.viewersGrid.statusItemRenderer =ステータス bbb.viewers.viewersGrid.statusItemRenderer = 状態
bbb.viewers.viewersGrid.statusItemRenderer.raiseHand.toolTip =挙手件数 {0} bbb.viewers.viewersGrid.statusItemRenderer.raiseHand.toolTip = 挙手数 {0}
bbb.viewers.viewersGrid.statusItemRenderer.streamIcon.toolTip =クリックして閲覧 bbb.viewers.viewersGrid.statusItemRenderer.streamIcon.toolTip = 視点にクリックしてください。
bbb.viewers.viewersGrid.statusItemRenderer.presIcon.toolTip =プレゼンター bbb.viewers.viewersGrid.statusItemRenderer.presIcon.toolTip = プレゼンター
bbb.viewers.presentBtn.toolTip =Web参加者をプレゼンターとして選択 bbb.viewers.presentBtn.toolTip = プレセンターを選択してください。
bbb.viewers.raiseHandBtn.toolTip =クリックして挙手。 bbb.viewers.raiseHandBtn.toolTip = クリックして、手を上げてください。
bbb.viewers.presentBtn.label =プレゼンターをスイッチ bbb.viewers.presentBtn.label = プレセンターを変える
bbb.viewers.kickUserBtn.toolTip = 退席させる
# Presentation # Presentation
## PresentationWindow.mxml ## PresentationWindow.mxml
bbb.presentation.title =プレゼンテーション bbb.presentation.title = プレゼンテーション
bbb.presentation.uploadPresBtn =プレゼンテーションのドキュメントをアップロード。 bbb.presentation.uploadPresBtn = 資料アップロード
bbb.presentation.uploadPresBtn.toolTip =プレゼンテーションのドキュメントをアップロード bbb.presentation.uploadPresBtn.toolTip = 資料をアップロードします
bbb.presentation.backBtn.toolTip =前のスライド bbb.presentation.backBtn.toolTip = 前に戻ります
bbb.presentation.slideNumLbl = bbb.presentation.slideNumLbl =
bbb.presentation.forwardBtn.toolTip =次のスライド bbb.presentation.forwardBtn.toolTip = 次に進みます。
bbb.presentation.resetZoomBtn.toolTip =ズームをリセット bbb.presentation.resetZoomBtn.toolTip = ズームを戻します。
bbb.presentation.presenterNameLbl ={0} が、現在プレゼン中。 bbb.presentation.presenterNameLbl = {0} がプレゼン中です
bbb.presentation.maximizeRestoreBtn.toolTip =このウィンドウを最大化 bbb.presentation.maximizeRestoreBtn.toolTip = 最大化
bbb.presentation.maximizeRestoreBtn.toolTip2 =前のサイズに戻す bbb.presentation.maximizeRestoreBtn.toolTip2 = に戻す
bbb.presentation.clickToUpload =ロードプレゼンテーションをアップロード bbb.presentation.clickToUpload = 資料をアップロード
bbb.presentation.maxUploadFileExceededAlert =エラー:このファイルは許可サイズより大きすぎます。 bbb.presentation.maxUploadFileExceededAlert = エラー: このファイルは許可されているサイズを超えています。
## PresentationWindowMediator.as ## PresentationWindowMediator.as
bbb.presentation.presenting ={0} が、現在プレゼン中。 bbb.presentation.presenting = {0} がプレゼン中です
bbb.presentation.pages ={0} / {1} bbb.presentation.pages = {0} / {1}
## FileUploadWindowMediator.as ## FileUploadWindowMediator.as
bbb.presentation.uploadcomplete =アップロードが完了しました。文書を変換し終わるまで、しばらくお待ちください。 bbb.presentation.uploadcomplete = アップロードが終了しました。ファイルを変換中です。もうしばらくお待ち下さい。
bbb.presentation.uploadsuccessful =アップロードに成功 bbb.presentation.uploadsuccessful = アップロードは成功しました。
bbb.presentation.uploaded =アップロードされました。 bbb.presentation.uploaded = アップロードされた。
bbb.presentation.document.supported =アップロードしたドキュメントはサポートされています。変換を開始... bbb.presentation.document.supported = アップロードされた資料は対応しています。 変換を始めます。
bbb.presentation.document.converted =正常にオフィス文書に変換されました。 bbb.presentation.document.converted = オフィスドキュメントの変換に成功しました。
bbb.presentation.error.document.convert.failed =エラー:オフィス文書への変換に失敗しました。 bbb.presentation.error.document.convert.failed = エラー: オフィスドキュメントの変換に失敗しました。
bbb.presentation.error.io =IOエラー管理者に連絡してください。 bbb.presentation.error.io = IO エラー: システム管理者に連絡してください。
bbb.presentation.error.security =セキュリティエラー:管理者に連絡してください。 bbb.presentation.error.security = セキュリティ エラー: システム管理者に連絡してください。
bbb.presentation.error.convert.format =エラー:アップロードされたファイルが有効な拡張子かどうか、ご確認ください。 bbb.presentation.error.convert.format = エラー: アップロードされたファイルの拡張子を確認してください。
bbb.presentation.error.convert.notsupported =エラー:アップロードしたドキュメントはサポートされていません。利用可能なファイルをアップロードしてください。 bbb.presentation.error.convert.notsupported = エラー: アップロードされたドキュメントは対応していません。 対応しているファイルをアップロードしてください。
bbb.presentation.error.convert.soffice =エラー:アップロードしたドキュメントを変換に失敗しました。 bbb.presentation.error.convert.soffice = エラー: アップロードされた資料の変換に失敗しました。
bbb.presentation.error.convert.nbpage =エラー:アップロードしたドキュメントのページ数が特定できません bbb.presentation.error.convert.nbpage = エラー: アップロードされた資料のページ数の測定に、失敗します
bbb.presentation.error.convert.maxnbpagereach =エラー:アップロードしたドキュメントのページが多すぎます。 bbb.presentation.error.convert.maxnbpagereach = エラー: アップロードされた資料のページ数が多すぎます。
bbb.presentation.error.convert.swf =エラー:アップロードファイルの変換時。管理者にお問い合わせください。 bbb.presentation.error.convert.swf = アップロードされたファイルを変換中にエラーが起こりました。システム管理者に連絡してください。
bbb.presentation.error.convert.swfimage =画像ファイルをSWFファイルに変換時にエラー画像が破損していないかどうか、またJPG/PNGフォーマットかどうか、ご確認ください。 bbb.presentation.error.convert.swfimage = 画像をフラッシュ形式に変換中にエラーが起きました。: 画像ファイルが壊れていないのを確認するか、JPG・PNG形式でアップロードしてください。
bbb.presentation.error.convert.swfpdf =PDFファイルをSWFファイルに変換時にエラーPDFファイルが破損していないかどうか、ご確認ください。 bbb.presentation.error.convert.swfpdf = PDFファイルをフラッシュ形式に変換中にエラーが起きました。: PDFファイルが壊れていないか確認してください。
bbb.presentation.error.convert.thumbnail =サムネイル作成時にエラー。管理者にお問い合わせください。 bbb.presentation.error.convert.thumbnail = サムネイル画像を作成中にエラーが起きました。システム管理者に連絡してください。
bbb.presentation.converted ={1} 中、{0} スライドを変換しました。 bbb.presentation.converted = {1} 枚中 {0} のスライドを変換しました。
bbb.presentation.extracting =スライドの抽出、{1} 中、{0} スライドを抽出しました bbb.presentation.extracting = {1} 枚中 {0} のスライドを抽出中
bbb.presentation.ok =OK bbb.presentation.ok = OK
bbb.presentation.uploadwindow.presentationfile =プレゼンテーションファイル bbb.presentation.uploadwindow.presentationfile = 資料
bbb.presentation.uploadwindow.pdf =PDF bbb.presentation.uploadwindow.pdf = PDF
bbb.presentation.uploadwindow.word =WORD bbb.presentation.uploadwindow.word = WORD
bbb.presentation.uploadwindow.excel =エクセル bbb.presentation.uploadwindow.excel = EXCEL
bbb.presentation.uploadwindow.powerpoint =パワーポイント bbb.presentation.uploadwindow.powerpoint = POWERPOINT
bbb.presentation.uploadwindow.image =画像 bbb.presentation.uploadwindow.image = 画像
## FileUploadWindow.mxml ## FileUploadWindow.mxml
bbb.fileupload.title =プレゼンテーションをアップロード bbb.fileupload.title = 資料アップロード
bbb.fileupload.fileLbl =ファイル: bbb.fileupload.fileLbl = ファイル:
bbb.fileupload.selectBtn.toolTip =ファイルを閲覧 bbb.fileupload.selectBtn.toolTip = ファイルの場所
bbb.fileupload.uploadBtn =アップロード bbb.fileupload.uploadBtn = アップロード
bbb.fileupload.uploadBtn.toolTip =ファイルをアップロード bbb.fileupload.uploadBtn.toolTip = 資料アップロード
bbb.fileupload.presentationNamesLbl =プレゼンテーションのアップロード: bbb.fileupload.presentationNamesLbl = アップロードされた資料:
bbb.fileupload.deleteBtn.toolTip =プレゼンテーションを削除 bbb.fileupload.deleteBtn.toolTip = 資料を削除
bbb.fileupload.showBtn =表示 bbb.fileupload.showBtn = 表示
bbb.fileupload.showBtn.toolTip =プレゼンテーションを表示 bbb.fileupload.showBtn.toolTip = 選択した資料を表示します。
bbb.fileupload.okCancelBtn =キャンセル bbb.fileupload.okCancelBtn = キャンセル
bbb.fileupload.progressLbl.uploadSuccessful =アップロードが完了しました。文書を変換し終わるまで、しばらくお待ちください。 bbb.fileupload.progressLbl.uploadSuccessful = アップロードは終了しました。ファイルを変換しますのでもうしばらくお待ち下さい。
bbb.fileupload.progressBar.uploadSuccessful =アップロード成功 bbb.fileupload.progressBar.uploadSuccessful = アップロード成功しました。
bbb.fileupload.progressLbl.uploading ={0}% アップロードされました。 bbb.fileupload.progressLbl.uploading = {0}% アップロードされました。
bbb.fileupload.progressBar.uploading ={0}% アップロードされました。 bbb.fileupload.progressBar.uploading = {0}% アップロードされました。間下このみ
bbb.fileupload.progressLbl.converting ={1} 中、{0} スライドを変換しました。 bbb.fileupload.progressLbl.converting = {1} 枚中 {0} のスライドを変換しました。
bbb.fileupload.progressBar.converting ={1} 中、{0} スライドを変換しました。 bbb.fileupload.progressBar.converting = {1} 枚中 {0} のスライドを変換しました。
bbb.fileupload.progressLbl.extracting =スライドの抽出、{1} 中、{0} スライドを抽出しました bbb.fileupload.progressLbl.extracting = {1} 枚中 {0} のスライドを抽出中
bbb.fileupload.progressBar.extracting =スライドの抽出、{1} 中、{0} スライドを抽出しました bbb.fileupload.progressBar.extracting = {1} 枚中 {0} のスライドを抽出中
bbb.fileupload.genThumbText =サムネイルの生成.. bbb.fileupload.genThumbText = サムネイルを作っています..
bbb.fileupload.progBarLbl =進捗: bbb.fileupload.progBarLbl = 進行状況:
# ChatWindow.mxml # ChatWindow.mxml
bbb.chat.title =チャット bbb.chat.title = チャット
bbb.chat.cmpColorPicker.toolTip =テキスト色 bbb.chat.cmpColorPicker.toolTip = カラーを選択
bbb.chat.sendBtn =送信 bbb.chat.sendBtn = 送信
bbb.chat.sendBtn.toolTip =メッセージを送信 bbb.chat.sendBtn.toolTip = チャットメッセージを送信します。
bbb.chat.publicChatUsername =すべて bbb.chat.publicChatUsername = 全員に
bbb.chat.publicMsgAwaiting =公開メッセージ待機中 bbb.chat.publicMsgAwaiting = 全員向けメッセージを待っています。
bbb.chat.publicMsgAwaiting2 =*公開メッセージ待機中* bbb.chat.publicMsgAwaiting2 = * 全員向けメッセージを待っています *
bbb.chat.privateMsgAwaiting =プライベートメッセージ待機中 bbb.chat.privateMsgAwaiting = 個人的メッセージを待っています。
bbb.chat.privateMsgAwaiting2 =*プライベートメッセージ待機中* bbb.chat.privateMsgAwaiting2 = * 個人的メッセージを待っています *
bbb.chat.privateChatSelect =プライベートにチャットする個人を選択 bbb.chat.privateChatSelect = 個人的にチャットする人を選んでください。
bbb.chat.chatOptions =チャットオプション bbb.chat.chatOptions = チャットオプション
bbb.chat.fontSize =フォントサイズ bbb.chat.fontSize = フォントサイズ
# ListenersWindow.mxml # ListenersWindow.mxml
bbb.listeners.title =リスナー{0} {1} bbb.listeners.title = リスナー{0} {1}
bbb.listeners.muteAllBtn.toolTip =ミュートすべて bbb.listeners.muteAllBtn.toolTip = 全てをミュート
bbb.listeners.unmuteAllBtn.toolTip =ミュート解除すべて bbb.listeners.unmuteAllBtn.toolTip = 全てミュート解除
bbb.listeners.ejectBtn.toolTip =締め出す音声参加者を選択 bbb.listeners.ejectBtn.toolTip = 外す音声のユーザーを選択してください
bbb.listeners.ejectTooltip =クリックしてユーザを締め出す。 bbb.listeners.ejectTooltip = リスナーを外します。
# ListenerItem.mxml # ListenerItem.mxml
bbb.listenerItem.nameLbl.toolTip =このユーザーを選択し、クリックしてミュートあるいは、ミュート解除 bbb.listenerItem.nameLbl.toolTip = このユーザーを選択してクリックでミュート・ミュート解除できます
bbb.listenerItem.talkImg.toolTip =会話中 bbb.listenerItem.talkImg.toolTip = 話します。
bbb.listenerItem.lockImg.toolTip =クリックしてミュートまたはミュート解除を維持 bbb.listenerItem.lockImg.toolTip = ミュート・ミュート解除を保持します。
bbb.listenerItem.muteUnmute.toolTip =このリスナーをミュートまたはミュート解除 bbb.listenerItem.muteUnmute.toolTip = このリスナーをミュート・ミュート解除します。
# PublishWindow.mxml # PublishWindow.mxml
bbb.publishVideo.title =ウェブカメラをストリーム bbb.publishVideo.title = ウェブカメラ中継
bbb.publishVideo.startPublishBtn.toolTip =ストリーミングを開始 bbb.publishVideo.startPublishBtn.toolTip = 中継ター
# DesktopPublishWindow.mxml # DesktopPublishWindow.mxml
bbb.desktopPublish.title =デスクトップの共有:プレゼンタのプレビュー bbb.desktopPublish.title = デスクトップ共有: プレゼンターのプレビュー
bbb.desktopView.title =デスクトップ共有 bbb.desktopView.title = デスクトップ共有
bbb.desktopView.fitToWindow =ウィンドウに合わせる bbb.desktopView.fitToWindow = ウィンドウに合わせる
bbb.desktopView.actualSize =サイズで表示 bbb.desktopView.actualSize = 際のサイズで表示
# ToolbarButton.mxml # ToolbarButton.mxml
bbb.toolbar.phone.toolTip =マイクを起動 bbb.toolbar.phone.toolTip = マイクを使う
bbb.toolbar.deskshare.toolTip =デスクトップを共有 bbb.toolbar.deskshare.toolTip = デスクトップを共有する
bbb.toolbar.video.toolTip =カメラを起動 bbb.toolbar.video.toolTip = カメラを使う
# HighlighterToolbar.mxml # HighlighterToolbar.mxml
bbb.highlighter.toolbar.pencil =蛍光ペン bbb.highlighter.toolbar.pencil = ペン
bbb.highlighter.toolbar.ellipse =円形 bbb.highlighter.toolbar.ellipse = 円形
bbb.highlighter.toolbar.rectangle =四角 bbb.highlighter.toolbar.rectangle = 長方
bbb.highlighter.toolbar.clear =ページをクリア bbb.highlighter.toolbar.clear = ページをクリア
bbb.highlighter.toolbar.undo =元に戻す bbb.highlighter.toolbar.undo = 元に戻す
bbb.highlighter.toolbar.color =色を選択 bbb.highlighter.toolbar.color = 色を選ぶ
bbb.highlighter.toolbar.thickness =太さを変更 bbb.highlighter.toolbar.thickness = 線の太さ
# WhiteboardButton.mxml # WhiteboardButton.mxml
bbb.highlighter.button.toolTipShow =ホワイトボードを表示 bbb.highlighter.button.toolTipShow = 描画ツールを表示
bbb.highlighter.button.toolTipHide =ホワイトボードを非表示 bbb.highlighter.button.toolTipHide = 描画ツールを隠す

View File

@ -42,6 +42,7 @@
uri="rtmp://HOST/video" uri="rtmp://HOST/video"
dependsOn="ViewersModule" dependsOn="ViewersModule"
videoQuality="70" videoQuality="70"
presenterShareOnly="false"
/> />
<module name="WhiteboardModule" url="WhiteboardModule.swf?v=VERSION" <module name="WhiteboardModule" url="WhiteboardModule.swf?v=VERSION"
@ -68,5 +69,12 @@
host="http://HOST" host="http://HOST"
/>--> />-->
<!--<module name="BreakoutModule" url="BreakoutModule.swf?v=VERSION"
uri="rtmp://192.168.0.225/bigbluebutton"
host="http://192.168.0.225"
dependsOn="ViewersModule"
salt="1708e5ecf25b7142b06f2338b4ea3cf1"
/>-->
</modules> </modules>
</config> </config>

View File

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
implements="org.bigbluebutton.common.IBigBlueButtonModule" xmlns:maps="org.bigbluebutton.modules.breakout.maps.*"
>
<mx:Script>
<![CDATA[
import com.asfusion.mate.events.Dispatcher;
import org.bigbluebutton.modules.breakout.events.StartBreakoutModule;
private var globalDispatcher:Dispatcher;
private var _moduleId:String = "HighlighterModule";
private var _moduleName:String = "Highlighter Module";
private var _attributes:Object;
public function get moduleId():String {
return _moduleId;
}
public function get moduleName():String {
return _moduleName;
}
public function get uri():String {
return _attributes.uri + "/" + _attributes.room;
}
public function get username():String {
return _attributes.username;
}
public function get connection():NetConnection {
return _attributes.connection;
}
public function get mode():String {
return _attributes.mode;
}
public function get userid():Number {
return _attributes.userid as Number;
}
public function get role():String {
return _attributes.userrole as String;
}
public function start(attributes:Object):void {
_attributes = attributes;
globalDispatcher = new Dispatcher();
var e:StartBreakoutModule = new StartBreakoutModule(StartBreakoutModule.START_BREAKOUT);
e.attributes = attributes;
globalDispatcher.dispatchEvent(e);
}
public function stop():void {
}
]]>
</mx:Script>
<maps:BreakoutMap id="breakoutMap"/>
</mx:Module>

View File

@ -73,6 +73,11 @@
return Number(_attributes.videoQuality); return Number(_attributes.videoQuality);
} }
public function get presenterShareOnly():Boolean{
if (_attributes.presenterShareOnly == "true") return true;
else return false;
}
public function start(attributes:Object):void { public function start(attributes:Object):void {
LogUtil.debug("Videoconf attr: " + attributes.username); LogUtil.debug("Videoconf attr: " + attributes.username);
_attributes = attributes; _attributes = attributes;

View File

@ -1,46 +0,0 @@
package org.bigbluebutton.common
{
import mx.controls.Label;
/**
* An extension for mx.controls.Label to truncate the text and show
* a tooltip with the full-length content. This sub-class is meant to be
* used when the regular truncateToFit does result in a "null" appendix
* on the string instead of the "...". In order for this to work, I used
* the following parameters in my mxml:
*
* - truncateToFit = false
* - maxWidth = set
* - width = set
*
*
* @author Tomi Niittumäki // Feijk Industries 2010
* @NOTE: Feel free to use! :)
*/
public class LabelTruncate extends Label{
// define the truncation indicator eg. ...(more) etc.
private const TRUNCATION_INDICATOR:String = new String("...");
/**
* Constructor
*/
public function LabelTruncate(){
super();
}
/**
* The overriding method, which forces the textField to truncate
* its content with the method truncateToFit(truncationIndicator:String)
* and then supers the tooltip to be the original full-length text.
*/
override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void{
super.updateDisplayList(unscaledWidth, unscaledHeight);
//trace("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!: "+textField.text);
textField.truncateToFit(TRUNCATION_INDICATOR);
super.toolTip = text;
}
}
}

View File

@ -34,7 +34,6 @@ package org.bigbluebutton.main.model.modules
import org.bigbluebutton.common.LogUtil; import org.bigbluebutton.common.LogUtil;
import org.bigbluebutton.common.Role; import org.bigbluebutton.common.Role;
import org.bigbluebutton.main.events.ModuleLoadEvent; import org.bigbluebutton.main.events.ModuleLoadEvent;
import org.bigbluebutton.main.events.UserServicesEvent;
import org.bigbluebutton.main.model.ConferenceParameters; import org.bigbluebutton.main.model.ConferenceParameters;
import org.bigbluebutton.main.model.ConfigParameters; import org.bigbluebutton.main.model.ConfigParameters;

View File

@ -32,6 +32,10 @@ package org.bigbluebutton.main.model.users
public class BBBUser public class BBBUser
{ {
public static const MODERATOR:String = "MODERATOR";
public static const VIEWER:String = "VIEWER";
public static const PRESENTER:String = "PRESENTER";
[Bindable] public var me:Boolean = false; [Bindable] public var me:Boolean = false;
[Bindable] public var userid:Number; [Bindable] public var userid:Number;
[Bindable] public var name:String; [Bindable] public var name:String;
@ -43,6 +47,8 @@ package org.bigbluebutton.main.model.users
[Bindable] public var room:String = ""; [Bindable] public var room:String = "";
[Bindable] public var authToken:String = ""; [Bindable] public var authToken:String = "";
[Bindable] public var selected:Boolean = false;
private var _status:StatusCollection = new StatusCollection(); private var _status:StatusCollection = new StatusCollection();
public function get status():ArrayCollection { public function get status():ArrayCollection {

View File

@ -97,8 +97,10 @@
win.height = rightWindowHeight; win.height = rightWindowHeight;
break; break;
case POPUP: case POPUP:
x = 200; x = (Math.random() * this.width) - 250;
y = 200; y = (Math.random() * this.height) - 250;
if (x < 250) x = 1;
if (y < 250) y = 1;
break; break;
case DESKTOP_SHARING_VIEW: case DESKTOP_SHARING_VIEW:
x = 1; x = 1;

View File

@ -0,0 +1,168 @@
package org.bigbluebutton.modules.breakout.business
{
import com.adobe.crypto.SHA1;
import flash.events.Event;
import flash.events.NetStatusEvent;
import flash.events.SyncEvent;
import flash.net.NetConnection;
import flash.net.SharedObject;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.navigateToURL;
import mx.controls.Alert;
import mx.events.CloseEvent;
import org.bigbluebutton.main.api.UserManager;
import org.bigbluebutton.main.model.users.BBBUser;
import org.bigbluebutton.main.model.users.Conference;
public class BreakoutProxy
{
private var urlLoader:URLLoader;
private var request:URLRequest;
private var meetingName:String;
private var attendeePW:String;
private var moderatorPW:String;
private var host:String;
private var conference:String;
private var room:String;
private var userid:Number;
private var username:String;
private var userrole:String;
private var connection:NetConnection;
private var ncURL:String;
private var breakoutSO:SharedObject;
private var usersList:Array;
private var kickUsers:Boolean;
private var api_url:String;
private var api_salt:String;
private var completeJoinUrl:String;
private var newWindow:String;
public function BreakoutProxy()
{
urlLoader = new URLLoader();
}
public function connect(a:Object):void{
host = a.host as String;
conference = a.conference as String;
room = a.room as String;
userid = a.userid as Number;
username = a.username as String;
userrole = a.userrole as String;
connection = a.connection;
ncURL = connection.uri;
api_url = host + "/bigbluebutton/api";
api_salt = a.salt;
breakoutSO = SharedObject.getRemote("breakoutSO", ncURL, false);
breakoutSO.addEventListener(SyncEvent.SYNC, sharedObjectSyncHandler);
breakoutSO.addEventListener(NetStatusEvent.NET_STATUS, netStatusEventHandler);
breakoutSO.client = this;
breakoutSO.connect(connection);
}
private function sharedObjectSyncHandler(e:SyncEvent):void{
}
private function netStatusEventHandler(e:NetStatusEvent):void{
}
public function createRoom(usersList:Array, kickUsers:Boolean):void{
this.usersList = usersList;
this.kickUsers = kickUsers;
meetingName = Math.random().toString();
var createString:String = "create" + "name=" + meetingName + "&meetingID=" + meetingName + api_salt;
var hash:String = SHA1.hash(createString);
var completeUrl:String = api_url + "/create?" + "name=" + meetingName + "&meetingID=" + meetingName + "&checksum=" + hash;
request = new URLRequest(completeUrl);
request.method = URLRequestMethod.GET;
urlLoader.addEventListener(Event.COMPLETE, handleMeetingCreated);
urlLoader.load(request);
}
private function handleMeetingCreated(e:Event):void{
//Alert.show("" + e.target.data);
//var returnString:String = '<?xml version="1.0" ?>' + e.target.data;
var xml:XML = new XML(e.target.data);
if (xml.returncode == "SUCCESS"){
attendeePW = xml.attendeePW;
moderatorPW = xml.moderatorPW;
startRoom();
} else if (xml.returncode == "FAILED"){
Alert.show(xml.messageKey + ":" + xml.message);
}
urlLoader.removeEventListener(Event.COMPLETE, handleMeetingCreated);
}
private function startRoom():void{
if (! newRoomHasModerator(usersList)) attendeePW = moderatorPW; //If there is no moderator assigned in the new room, assign everyone as Moderator;
breakoutSO.send("redirectUser", meetingName, moderatorPW, attendeePW, kickUsers, usersList);
}
public function redirectUser(newMeetingName:String, newModeratorPW:String, newAttendeePW:String, kickUser:Boolean, userList:Array):void{
if (!checkIfUserInList(userList)) return;
var password:String;
if (userrole == "MODERATOR" ) password = newModeratorPW;
else password = newAttendeePW;
var safeUsername:String = username.replace(" ", "+");
var joinString:String = "join" + "fullName=" + safeUsername + "&meetingID=" + newMeetingName + "&password=" + password + "&userID=" + userid + api_salt;
var hash:String = SHA1.hash(joinString);
completeJoinUrl = api_url + "/join?" + "fullName=" + safeUsername + "&meetingID=" + newMeetingName +
"&password=" + password + "&userID=" + userid + "&checksum=" + hash;
var logoutMessage:String;
if (kickUser){
newWindow = "_self";
logoutMessage = "You are being redirected to a new meeting. Click to continue";
}
else if (!kickUser){
newWindow = "_blank";
logoutMessage = "A new meeting will open. Click to continue";
}
//Alert.show(completeJoinUrl);
Alert.show(logoutMessage, "", 4, null, onAlertClose);
}
private function onAlertClose(e:CloseEvent):void{
request = new URLRequest(completeJoinUrl);
navigateToURL(request, newWindow);
}
private function checkIfUserInList(list:Array):Boolean{
for (var i:int = 0; i<list.length; i++){
if (list[i] == userid) return true;
}
return false;
}
private function newRoomHasModerator(list:Array):Boolean{
var conference:Conference = UserManager.getInstance().getConference();
for (var i:int = 0; i<list.length; i++){
var user:BBBUser = conference.getParticipant(Number(list[i]));
if (user.role == BBBUser.MODERATOR) return true;
}
return false;
}
}
}

View File

@ -0,0 +1,17 @@
package org.bigbluebutton.modules.breakout.events
{
import flash.events.Event;
public class CreateRoomEvent extends Event
{
public static const CREATE_ROOM:String = "Create Breakout Room";
public var kickUsers:Boolean;
public var usersList:Array;
public function CreateRoomEvent(type:String)
{
super(type, true, false);
}
}
}

View File

@ -0,0 +1,16 @@
package org.bigbluebutton.modules.breakout.events
{
import flash.events.Event;
public class StartBreakoutModule extends Event
{
public static const START_BREAKOUT:String = "START_BREAKOUT";
public var attributes:Object;
public function StartBreakoutModule(type:String)
{
super(type, true, false);
}
}
}

View File

@ -0,0 +1,27 @@
package org.bigbluebutton.modules.breakout.managers
{
import com.asfusion.mate.events.Dispatcher;
import org.bigbluebutton.main.events.ToolbarButtonEvent;
import org.bigbluebutton.modules.breakout.views.BreakoutButton;
public class BreakoutManager
{
private var dispatcher:Dispatcher;
private var button:BreakoutButton;
public function BreakoutManager()
{
dispatcher = new Dispatcher();
button = new BreakoutButton;
}
public function addButton(attributes:Object):void{
if (attributes.userrole != "MODERATOR") return;
var e:ToolbarButtonEvent = new ToolbarButtonEvent(ToolbarButtonEvent.ADD);
e.button = button;
dispatcher.dispatchEvent(e);
}
}
}

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<EventMap xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns="http://mate.asfusion.com/">
<mx:Script>
<![CDATA[
import mx.events.FlexEvent;
import org.bigbluebutton.modules.breakout.business.BreakoutProxy;
import org.bigbluebutton.modules.breakout.events.CreateRoomEvent;
import org.bigbluebutton.modules.breakout.events.StartBreakoutModule;
import org.bigbluebutton.modules.breakout.managers.BreakoutManager;
]]>
</mx:Script>
<EventHandlers type="{FlexEvent.PREINITIALIZE}" >
<ObjectBuilder generator="{BreakoutProxy}" cache="global" />
<ObjectBuilder generator="{BreakoutManager}" cache="global" />
</EventHandlers>
<EventHandlers type="{StartBreakoutModule.START_BREAKOUT}" >
<MethodInvoker generator="{BreakoutProxy}" method="connect" arguments="{event.attributes}" />
<MethodInvoker generator="{BreakoutManager}" method="addButton" arguments="{event.attributes}" />
</EventHandlers>
<EventHandlers type="{CreateRoomEvent.CREATE_ROOM}" >
<MethodInvoker generator="{BreakoutProxy}" method="createRoom" arguments="{[event.usersList, event.kickUsers]}" />
</EventHandlers>
</EventMap>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<mx:Button xmlns:mx="http://www.adobe.com/2006/mxml" label="Breakout" click="openWindow()" >
<mx:Script>
<![CDATA[
import mx.core.Application;
import mx.events.CloseEvent;
import mx.managers.PopUpManager;
private var window:BreakoutWindow;
private function openWindow():void{
window = BreakoutWindow(PopUpManager.createPopUp(this, BreakoutWindow, true));
window.x = stage.width/2 - window.width/2;
window.y = stage.height/2 - window.height/2;
window.addEventListener(CloseEvent.CLOSE, onWindowClose);
}
private function onWindowClose(e:CloseEvent):void{
PopUpManager.removePopUp(window);
window = null
}
]]>
</mx:Script>
</mx:Button>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" borderStyle="solid" >
<mx:Script>
<![CDATA[
private function onClick():void{
data.selected = checkUser.selected;
}
]]>
</mx:Script>
<mx:Label id="lblName" width="100" text="{data.name}" />
<mx:CheckBox id="checkUser" click="onClick()" />
</mx:HBox>

View File

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="300" label="Breakout participants to a separate room:"
creationComplete="onCreationComplete()"
showCloseButton="true">
<mx:Script>
<![CDATA[
import com.asfusion.mate.events.Dispatcher;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.events.CloseEvent;
import org.bigbluebutton.main.api.UserManager;
import org.bigbluebutton.main.model.users.Conference;
import org.bigbluebutton.modules.breakout.events.CreateRoomEvent;
private var dispatcher:Dispatcher;
private var conference:Conference;
[Bindable] private var participants:ArrayCollection;
private function onCreationComplete():void{
dispatcher = new Dispatcher();
conference = UserManager.getInstance().getConference();
participants = conference.users;
}
private function onClick():void{
var e:CreateRoomEvent = new CreateRoomEvent(CreateRoomEvent.CREATE_ROOM);
e.kickUsers = checkKick.selected;
e.usersList = getUsersToBreakout();
dispatcher.dispatchEvent(e);
dispatchEvent(new CloseEvent(CloseEvent.CLOSE));
}
private function getUsersToBreakout():Array{
var a:ArrayCollection = new ArrayCollection();
for (var i:int = 0; i<participants.length; i++){
if (participants.getItemAt(i).selected) a.addItem(participants[i].userid);
}
return a.toArray();
}
]]>
</mx:Script>
<mx:List width="100%" height="100%" id="breakoutList" itemRenderer="org.bigbluebutton.modules.breakout.views.BreakoutItem"
dataProvider="{participants}" allowMultipleSelection="true" />
<mx:ControlBar>
<mx:Button id="btnCreate" click="onClick()" label="Create Room" />
<mx:CheckBox id="checkKick" label="Kick selected users from current meeting" />
</mx:ControlBar>
</mx:TitleWindow>

View File

@ -38,7 +38,7 @@
]]> ]]>
</mx:Script> </mx:Script>
<common:LabelTruncate maxWidth="50" width="50" truncateToFit="false" id="lblName" text="{data.name}" visible="{!(data.name == data.lastSenderName)}" color="gray" /> <mx:Label maxWidth="50" width="50" truncateToFit="true" id="lblName" text="{data.name}" visible="{!(data.name == data.lastSenderName)}" color="gray" />
<mx:Text id="txtMessage" htmlText="{rolledOver ? data.senderText : data.text}" link="onLinkClick(event)" color="{data.color}" <mx:Text id="txtMessage" htmlText="{rolledOver ? data.senderText : data.text}" link="onLinkClick(event)" color="{data.color}"
rollOver="onRollOver()" rollOut="onRollOut()" width="100%" /> rollOver="onRollOver()" rollOut="onRollOut()" width="100%" />
<mx:Label id="lblTime" text="{rolledOver ? data.senderTime : data.time}" visible="{!(data.lastTime == data.time) || !(data.name == data.lastSenderName)}" color="gray" /> <mx:Label id="lblTime" text="{rolledOver ? data.senderTime : data.time}" visible="{!(data.lastTime == data.time) || !(data.name == data.lastSenderName)}" color="gray" />

View File

@ -34,8 +34,11 @@
import mx.controls.Alert; import mx.controls.Alert;
import mx.core.Application; import mx.core.Application;
import mx.resources.ResourceBundle;
import mx.resources.ResourceManager;
import org.bigbluebutton.main.views.MainCanvas; import org.bigbluebutton.main.views.MainCanvas;
import org.bigbluebutton.util.i18n.ResourceUtil;
private var _xPosition:int; private var _xPosition:int;
private var _yPosition:int; private var _yPosition:int;
@ -50,6 +53,11 @@
/* Set up full screen handler. */ /* Set up full screen handler. */
Application.application.stage.addEventListener(FullScreenEvent.FULL_SCREEN, fullScreenHandler); Application.application.stage.addEventListener(FullScreenEvent.FULL_SCREEN, fullScreenHandler);
dispState = Application.application.stage.displayState; dispState = Application.application.stage.displayState;
/*var r:ResourceBundle = new ResourceBundle("fr_FR", "core");
r.content["truncationIndicator"] = '...';
resourceManager.addResourceBundle(r);
resourceManager.update();*/
} }
private function fullScreenHandler(evt:FullScreenEvent):void { private function fullScreenHandler(evt:FullScreenEvent):void {
@ -65,6 +73,11 @@
} }
} }
override protected function resourcesChanged():void{
super.resourcesChanged();
this.title = ResourceUtil.getInstance().getString("bbb.chat.title");
}
]]> ]]>
</mx:Script> </mx:Script>

View File

@ -236,6 +236,11 @@
closeWindow(); closeWindow();
} }
override protected function resourcesChanged():void{
super.resourcesChanged();
this.title = ResourceUtil.getInstance().getString('bbb.desktopPublish.title');
}
]]> ]]>
</mx:Script> </mx:Script>
<mx:Image id="cursorImg" visible="false" source="@Embed('../../assets/images/cursor4.png')"/> <mx:Image id="cursorImg" visible="false" source="@Embed('../../assets/images/cursor4.png')"/>

View File

@ -296,6 +296,11 @@
dispatchEvent(new ViewWindowEvent(ViewWindowEvent.CLOSE)); dispatchEvent(new ViewWindowEvent(ViewWindowEvent.CLOSE));
} }
override protected function resourcesChanged():void{
super.resourcesChanged();
this.title = ResourceUtil.getInstance().getString('bbb.desktopView.title');
}
]]> ]]>
</mx:Script> </mx:Script>
<mx:Move id="cursorMove" target="{cursorImg}"/> <mx:Move id="cursorMove" target="{cursorImg}"/>

View File

@ -160,6 +160,14 @@
moderator = e.moderator; moderator = e.moderator;
showCloseButton = false; showCloseButton = false;
} }
override protected function resourcesChanged():void{
super.resourcesChanged();
if (listeners.length > 4)
windowTitle = ResourceUtil.getInstance().getString('bbb.listeners.title', [":", listeners.length]) ;
else
windowTitle = ResourceUtil.getInstance().getString('bbb.listeners.title', ["", ""]) ;
}
]]> ]]>
</mx:Script> </mx:Script>
<mx:TileList id="listenersList" height="100%" width="100%" itemClick="listenerSelectEvent(event);" <mx:TileList id="listenersList" height="100%" width="100%" itemClick="listenerSelectEvent(event);"

View File

@ -533,6 +533,11 @@
return this.slideView; return this.slideView;
} }
override protected function resourcesChanged():void{
super.resourcesChanged();
if ((slideView != null) && (!slideView.visible)) this.title = ResourceUtil.getInstance().getString('bbb.presentation.title');
}
]]> ]]>
</mx:Script> </mx:Script>

View File

@ -114,7 +114,7 @@ package org.bigbluebutton.modules.videoconf.business
ns.publish(e.stream); ns.publish(e.stream);
} }
public function stopBroadcasting(e:StopBroadcastEvent):void{ public function stopBroadcasting():void{
if (ns != null) { if (ns != null) {
ns.attachCamera(null); ns.attachCamera(null);
ns.close(); ns.close();

View File

@ -27,6 +27,7 @@
import org.bigbluebutton.common.LogUtil; import org.bigbluebutton.common.LogUtil;
import org.bigbluebutton.main.events.BBBEvent; import org.bigbluebutton.main.events.BBBEvent;
import org.bigbluebutton.main.events.MadePresenterEvent;
import org.bigbluebutton.main.events.OpenWindowEvent; import org.bigbluebutton.main.events.OpenWindowEvent;
import org.bigbluebutton.main.events.ToolbarButtonEvent; import org.bigbluebutton.main.events.ToolbarButtonEvent;
import org.bigbluebutton.main.model.users.events.BroadcastStartedEvent; import org.bigbluebutton.main.model.users.events.BroadcastStartedEvent;
@ -75,6 +76,7 @@
public function addToolbarButton():void{ public function addToolbarButton():void{
button = new ToolbarButton(); button = new ToolbarButton();
button.isPresenter = !module.presenterShareOnly;
var event:ToolbarButtonEvent = new ToolbarButtonEvent(ToolbarButtonEvent.ADD); var event:ToolbarButtonEvent = new ToolbarButtonEvent(ToolbarButtonEvent.ADD);
event.button = button; event.button = button;
globalDispatcher.dispatchEvent(event); globalDispatcher.dispatchEvent(event);
@ -101,15 +103,16 @@
} }
private function stopPublishing(e:StopBroadcastEvent):void{ private function stopPublishing(e:StopBroadcastEvent):void{
proxy.stopBroadcasting(e); proxy.stopBroadcasting();
proxy = null; proxy = null;
proxy = new VideoProxy(module.uri); proxy = new VideoProxy(module.uri);
var broadcastEvent:BroadcastStoppedEvent = new BroadcastStoppedEvent(); var broadcastEvent:BroadcastStoppedEvent = new BroadcastStoppedEvent();
broadcastEvent.stream = e.stream; broadcastEvent.stream = publishWindow.streamName;
broadcastEvent.userid = module.userid; broadcastEvent.userid = module.userid;
globalDispatcher.dispatchEvent(broadcastEvent); globalDispatcher.dispatchEvent(broadcastEvent);
//Make toolbar button visible again //Make toolbar button enabled again
button.show(); button.show();
} }
@ -118,6 +121,19 @@
globalDispatcher.dispatchEvent(new CloseAllWindowsEvent()); globalDispatcher.dispatchEvent(new CloseAllWindowsEvent());
} }
private function switchToPresenter():void{
if (module.presenterShareOnly){
button.isPresenter = true;
}
}
private function switchToViewer():void{
if (module.presenterShareOnly){
button.isPresenter = false;
if (publishWindow != null) publishWindow.close();
}
}
]]> ]]>
</mx:Script> </mx:Script>
@ -150,4 +166,12 @@
<InlineInvoker method="viewCamera" arguments="{[event.userid, event.stream, event.viewedName]}" /> <InlineInvoker method="viewCamera" arguments="{[event.userid, event.stream, event.viewedName]}" />
</EventHandlers> </EventHandlers>
<EventHandlers type="{MadePresenterEvent.SWITCH_TO_PRESENTER_MODE}" >
<InlineInvoker method="switchToPresenter" />
</EventHandlers>
<EventHandlers type="{MadePresenterEvent.SWITCH_TO_VIEWER_MODE}">
<InlineInvoker method="switchToViewer" />
</EventHandlers>
</EventMap> </EventMap>

View File

@ -25,7 +25,7 @@
implements="org.bigbluebutton.common.IBbbModuleWindow" implements="org.bigbluebutton.common.IBbbModuleWindow"
creationComplete="init()" creationComplete="init()"
width="{camWidth + 6}" height="{camHeight + 73}" width="{camWidth + 6}" height="{camHeight + 73}"
title="Stream webcam" title="{ResourceUtil.getInstance().getString('bbb.publishVideo.title')}"
backgroundImage="{bbbLogo}" backgroundImage="{bbbLogo}"
resizable="false" resizable="false"
xmlns:mate="http://mate.asfusion.com/"> xmlns:mate="http://mate.asfusion.com/">
@ -42,6 +42,7 @@
import org.bigbluebutton.modules.videoconf.events.CloseAllWindowsEvent; import org.bigbluebutton.modules.videoconf.events.CloseAllWindowsEvent;
import org.bigbluebutton.modules.videoconf.events.StartBroadcastEvent; import org.bigbluebutton.modules.videoconf.events.StartBroadcastEvent;
import org.bigbluebutton.modules.videoconf.events.StopBroadcastEvent; import org.bigbluebutton.modules.videoconf.events.StopBroadcastEvent;
import org.bigbluebutton.util.i18n.ResourceUtil;
private var images:Images = new Images(); private var images:Images = new Images();
[Bindable] public var camIcon:Class = images.control_play; [Bindable] public var camIcon:Class = images.control_play;
@ -159,6 +160,11 @@
} }
} }
override protected function resourcesChanged():void{
super.resourcesChanged();
this.title = ResourceUtil.getInstance().getString('bbb.publishVideo.title');
}
]]> ]]>
</mx:Script> </mx:Script>

View File

@ -20,14 +20,20 @@
$Id: $ $Id: $
--> -->
<mx:Button xmlns:mx="http://www.adobe.com/2006/mxml" icon="{camIcon}" click="openPublishWindow()" creationComplete="init()" toolTip="{ResourceUtil.getInstance().getString('bbb.toolbar.video.toolTip')}"> <mx:Button xmlns:mx="http://www.adobe.com/2006/mxml" icon="{camIcon}"
click="openPublishWindow()" creationComplete="init()"
toolTip="{ResourceUtil.getInstance().getString('bbb.toolbar.video.toolTip')}"
visible="{isPresenter}">
<mx:Script> <mx:Script>
<![CDATA[ <![CDATA[
import com.asfusion.mate.events.Dispatcher;
import org.bigbluebutton.common.Images; import org.bigbluebutton.common.Images;
import org.bigbluebutton.modules.videoconf.events.OpenPublishWindowEvent; import org.bigbluebutton.modules.videoconf.events.OpenPublishWindowEvent;
import com.asfusion.mate.events.Dispatcher;
import org.bigbluebutton.util.i18n.ResourceUtil; import org.bigbluebutton.util.i18n.ResourceUtil;
[Bindable] public var isPresenter:Boolean;
private var images:Images = new Images(); private var images:Images = new Images();
[Bindable] public var camIcon:Class = images.webcam; [Bindable] public var camIcon:Class = images.webcam;

View File

@ -28,7 +28,6 @@
<mx:Script> <mx:Script>
<![CDATA[ <![CDATA[
import org.bigbluebutton.common.LogUtil;
import com.asfusion.mate.events.Dispatcher; import com.asfusion.mate.events.Dispatcher;
import flexlib.mdi.events.MDIWindowEvent; import flexlib.mdi.events.MDIWindowEvent;
@ -36,6 +35,7 @@
import mx.controls.Alert; import mx.controls.Alert;
import mx.core.UIComponent; import mx.core.UIComponent;
import org.bigbluebutton.common.LogUtil;
import org.bigbluebutton.main.events.BBBEvent; import org.bigbluebutton.main.events.BBBEvent;
import org.bigbluebutton.main.views.MainCanvas; import org.bigbluebutton.main.views.MainCanvas;
import org.bigbluebutton.modules.videoconf.events.CloseAllWindowsEvent; import org.bigbluebutton.modules.videoconf.events.CloseAllWindowsEvent;
@ -71,12 +71,11 @@
globalDispatcher = new Dispatcher(); globalDispatcher = new Dispatcher();
} }
private function onCloseEvent(event:MDIWindowEvent):void { private function onCloseEvent(event:MDIWindowEvent = null):void {
LogUtil.debug("ViewWindow closing " + stream); LogUtil.debug("ViewWindow closing " + stream);
var bbbEvt:BBBEvent = new BBBEvent("ViewVideoCloseEvent"); var bbbEvt:BBBEvent = new BBBEvent("ViewVideoCloseEvent");
bbbEvt.message = stream; bbbEvt.message = stream;
dispatchEvent(bbbEvt); dispatchEvent(bbbEvt);
} }
public function startVideo(connection:NetConnection, stream:String):void{ public function startVideo(connection:NetConnection, stream:String):void{
@ -147,6 +146,7 @@
override public function close(event:MouseEvent=null):void{ override public function close(event:MouseEvent=null):void{
ns.close(); ns.close();
//onCloseEvent();
super.close(event); super.close(event);
} }

View File

@ -22,8 +22,7 @@
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" <mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:mate="http://mate.asfusion.com/" xmlns:mate="http://mate.asfusion.com/"
verticalScrollPolicy="off" horizontalScrollPolicy="off" verticalScrollPolicy="off" horizontalScrollPolicy="off">
creationComplete="onCreationComplete()">
<mate:Listener type="ViewVideoCloseEvent" method="onViewVideoCloseEvent"/> <mate:Listener type="ViewVideoCloseEvent" method="onViewVideoCloseEvent"/>
@ -31,6 +30,8 @@
<![CDATA[ <![CDATA[
import com.asfusion.mate.events.Dispatcher; import com.asfusion.mate.events.Dispatcher;
import mx.controls.Alert;
import org.bigbluebutton.common.Images; import org.bigbluebutton.common.Images;
import org.bigbluebutton.common.LogUtil; import org.bigbluebutton.common.LogUtil;
import org.bigbluebutton.main.events.BBBEvent; import org.bigbluebutton.main.events.BBBEvent;
@ -39,11 +40,6 @@
import org.bigbluebutton.util.i18n.ResourceUtil; import org.bigbluebutton.util.i18n.ResourceUtil;
private var images:Images = new Images(); private var images:Images = new Images();
private var streamName:String = "";
private function onCreationComplete():void{
streamName = data.streamName;
}
private function viewCamera():void { private function viewCamera():void {
LogUtil.debug("ViewersModule - sending camera view request for stream" + data.streamName); LogUtil.debug("ViewersModule - sending camera view request for stream" + data.streamName);
@ -54,9 +50,8 @@
private function onViewVideoCloseEvent(event:BBBEvent):void { private function onViewVideoCloseEvent(event:BBBEvent):void {
LogUtil.debug("ViewWindoClosing event: " + event.message); LogUtil.debug("ViewWindoClosing event: " + event.message);
if (streamName == event.message) { if (data.streamName == event.message) {
streamIcon.enabled = true; streamIcon.enabled = true;
streamName = "";
} }
} }

View File

@ -54,7 +54,7 @@
import org.bigbluebutton.util.i18n.ResourceUtil; import org.bigbluebutton.util.i18n.ResourceUtil;
[Bindable] [Bindable]
private var windowTitle:String = ResourceUtil.getInstance().getString('bbb.viewers.title',["", ""]) ; private var windowTitle:String = ResourceUtil.getInstance().getString('bbb.viewers.title',["", ""]);
[Bindable] [Bindable]
public var participants:ArrayCollection = new ArrayCollection(); public var participants:ArrayCollection = new ArrayCollection();
@ -139,6 +139,11 @@
} }
} }
override protected function resourcesChanged():void{
super.resourcesChanged();
this.title = ResourceUtil.getInstance().getString('bbb.viewers.title',["", ""]);
}
]]> ]]>
</mx:Script> </mx:Script>

View File

@ -38,9 +38,6 @@
GENTOO=$(uname -r | grep gentoo | cut -d- -f2); GENTOO=$(uname -r | grep gentoo | cut -d- -f2);
TOMCAT="" TOMCAT=""
OLDEVENTIP=$(cat /opt/freeswitch/conf/autoload_configs/event_socket.conf.xml | grep 'name="listen-ip"' | cut -d\" -f4 | awk '{print $1}');
get_platform() { get_platform() {
@ -329,13 +326,18 @@ while [ $# -gt 0 ]; do
# all other parameters requires at least 1 argument # all other parameters requires at least 1 argument
# #
if [ $# -lt 2 ]; then #if [ $# -lt 2 ]; then
usage #usage
exit 1 # exit 1
fi #fi
if [ "$1" = "-setip" -o "$1" = "--setip" ]; then if [ "$1" = "-setip" -o "$1" = "--setip" ]; then
HOST="${2}" HOST="${2}"
if test -z "${2}"; then
echo "HOST IP=`ifconfig | grep -m 1 'inet addr:' | cut -d: -f2 | awk '{print $1}'`"
#echo "PORT=`echo ${2}|cut -d: -f2`"
fi
if echo $HOST|grep -q ":"; then if echo $HOST|grep -q ":"; then
HOST=`echo ${2}|cut -d: -f1` HOST=`echo ${2}|cut -d: -f1`
PORT=`echo ${2}|cut -d: -f2` PORT=`echo ${2}|cut -d: -f2`
@ -346,18 +348,36 @@ while [ $# -gt 0 ]; do
if [ "$1" = "--setup-dev" -o "$1" = "-setup-dev" ]; then if [ "$1" = "--setup-dev" -o "$1" = "-setup-dev" ]; then
SETUPDEV="${2}" SETUPDEV="${2}"
if test -z "${2}"; then
usage;
fi
shift; shift shift; shift
continue continue
fi fi
if [ "$1" = "--conference" -o "$1" = "-conference" ]; then if [ "$1" = "--conference" -o "$1" = "-conference" ]; then
CONFERENCE="${2}" CONFERENCE="${2}"
confapp=`cat /usr/share/red5/webapps/bigbluebutton/WEB-INF/bigbluebutton.properties | grep 'asterisk.application' | cut -d= -f2`;
freeapp=`cat /usr/share/red5/webapps/bigbluebutton/WEB-INF/red5-web.xml | grep "<import resource" | cut -d\" -f2 | cut -d. -f1 | tail -n1`;
if test -z "${CONFERENCE}"; then
if [ $confapp == "meetme" ]; then
echo "Current conference application is $confapp";
elif [ $confapp == "konference" ] && [ $freeapp == "bbb-voice-asterisk" ]; then
echo "Current conference application is $confapp";
elif [ $freeapp == "bbb-voice-freeswitch" ]; then
echo "Current conference application is freeswitch";
fi
fi
shift; shift shift; shift
continue continue
fi fi
if [ "$1" = "--salt" -o "$1" = "-salt" -o "$1" = "--set-salt" ]; then if [ "$1" = "--salt" -o "$1" = "-salt" -o "$1" = "--set-salt" ]; then
SALT="${2}" SALT="${2}"
CSALT=`cat /var/lib/tomcat6/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties | grep securitySalt | cut -d= -f2`;
if test -z "${SALT}"; then
echo Current Salt retrieved from bigbluebutton.properties: $CSALT;
fi
shift; shift shift; shift
continue continue
fi fi
@ -962,6 +982,10 @@ if [ $CHECK ]; then
MEM=`free -m | grep Mem | awk '{ print $2}'` MEM=`free -m | grep Mem | awk '{ print $2}'`
echo "Memory: $MEM MB" echo "Memory: $MEM MB"
if [ -e /etc/lsb-release ]; then
cat /etc/lsb-release;
fi
echo echo
echo "/var/www/bigbluebutton/client/conf/config.xml:" echo "/var/www/bigbluebutton/client/conf/config.xml:"
IP=$(cat /var/www/bigbluebutton/client/conf/config.xml | sed -n '/porttest /{s/.*host="//;s/".*//;p}') IP=$(cat /var/www/bigbluebutton/client/conf/config.xml | sed -n '/porttest /{s/.*host="//;s/".*//;p}')
@ -1279,7 +1303,7 @@ if [ $CONFERENCE ]; then
# update $RED5_DIR/webapps/bigbluebutton/WEB-INF/bigbluebutton.properties # update $RED5_DIR/webapps/bigbluebutton/WEB-INF/bigbluebutton.properties
# #
# test this as a hack to check if the ip stays in listen-ip for event-conf.xml # test this as a hack to check if the ip stays in listen-ip for event-conf.xml
EVENTIP=$(cat /opt/freeswitch/conf/autoload_configs/event_socket.conf.xml | grep 'name="listen-ip"' | cut -d\" -f4 | awk '{print $1}') EVENTIP=$(sudo cat /opt/freeswitch/conf/autoload_configs/event_socket.conf.xml | grep 'name="listen-ip"' | cut -d\" -f4 | awk '{print $1}')
sudo sed -i "s/asterisk.application[ ]*=.*/asterisk.application=meetme/g" \ sudo sed -i "s/asterisk.application[ ]*=.*/asterisk.application=meetme/g" \
$RED5_DIR/webapps/bigbluebutton/WEB-INF/bigbluebutton.properties $RED5_DIR/webapps/bigbluebutton/WEB-INF/bigbluebutton.properties