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
/*
Copyright 2010 Blindside Networks
if(function_exists("curl_init()"))
{
function bbb_wrap_simplexml_load_file($url)
{
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
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() );
$timeout = 10;
curl_setopt( $ch, CURLOPT_URL, $url );
@ -13,17 +35,9 @@ if(function_exists("curl_init()"))
curl_close( $ch );
return (new SimpleXMLElement($data));
}
}
else
{
/*
* REQUIREMENT - PHP.INI
* allow_url_fopen = On
*/
function bbb_wrap_simplexml_load_file($url)
{
return (simplexml_load_file($url));
}
else{
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_join = $URL."api/join?";
$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 ) )
$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_join = $URL."api/join?";
$voiceBridge = 70000 + rand(0, 9999);
@ -202,18 +216,17 @@ public function getMeetingInfo( $meetingID, $modPW, $URL, $SALT ) {
public function getMeetingInfoArray( $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
return array('returncode' => $xml->returncode, 'message' => $xml->message, 'messageKey' => $xml->messageKey );
}
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 );
}
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);
}
else { //If the server is unreachable, then prompts the user of the necessary action
return null;
}
return array('returncode' => $xml->returncode, 'message' => $xml->message, 'messageKey' => $xml->messageKey );
}
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 );
}
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);
}
else { //If the server is unreachable, then prompts the user of the necessary action
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="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="BreakoutModule.swf" optimize="true" sourcePath="src/BreakoutModule.mxml"/>
</modules>
<buildCSSFiles>
<buildCSSFileEntry destPath="bin" sourcePath="src/branding/css/theme.css"/>

View File

@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<flexProperties flexServerType="0" toolCompile="true" useServerFlexSDK="false" version="1"/>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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
bin
client

View File

@ -25,6 +25,7 @@
<property name="VIDEO" value="VideoconfModule" />
<property name="WHITEBOARD" value="WhiteboardModule" />
<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"/>
@ -100,6 +101,8 @@
<target-player>10.0.0</target-player>
<source-path path-element="locale/{locale}"/>
<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"/>
</mxmlc>
</sequential>
@ -114,6 +117,10 @@
</copy>
</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">
<build-module src="${SRC_DIR}" target="${CHAT}" />
</target>
@ -169,8 +176,8 @@
<!-- just a grouping of modules to compile -->
<target name="build-main-chat-viewers-listeners-present"
depends="build-bbb-main, build-chat, build-viewers, build-listeners, build-present"
description="Compile main, chat, viewers, listeners, present modules">
depends="build-bbb-main, build-chat, build-viewers, build-listeners, build-present, build-breakout"
description="Compile main, chat, viewers, listeners, present, breakout modules">
</target>
<!-- just a grouping of modules to compile -->
@ -323,7 +330,7 @@
description="Build BBB client skipping compiling of locales"/>
<target name="clean-build-all" depends="clean, generate-html-wrapper, localization, compile-deskshare-standalone, compile-bbb"
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"/>
<target name="cleanandmake" depends="clean-build-all" description="Build BBB client including locales"/>
</project>

View File

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

View File

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

View File

@ -42,6 +42,7 @@
uri="rtmp://HOST/video"
dependsOn="ViewersModule"
videoQuality="70"
presenterShareOnly="false"
/>
<module name="WhiteboardModule" url="WhiteboardModule.swf?v=VERSION"
@ -68,5 +69,12 @@
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>
</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);
}
public function get presenterShareOnly():Boolean{
if (_attributes.presenterShareOnly == "true") return true;
else return false;
}
public function start(attributes:Object):void {
LogUtil.debug("Videoconf attr: " + attributes.username);
_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.Role;
import org.bigbluebutton.main.events.ModuleLoadEvent;
import org.bigbluebutton.main.events.UserServicesEvent;
import org.bigbluebutton.main.model.ConferenceParameters;
import org.bigbluebutton.main.model.ConfigParameters;

View File

@ -32,6 +32,10 @@ package org.bigbluebutton.main.model.users
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 userid:Number;
[Bindable] public var name:String;
@ -43,6 +47,8 @@ package org.bigbluebutton.main.model.users
[Bindable] public var room:String = "";
[Bindable] public var authToken:String = "";
[Bindable] public var selected:Boolean = false;
private var _status:StatusCollection = new StatusCollection();
public function get status():ArrayCollection {

View File

@ -97,8 +97,10 @@
win.height = rightWindowHeight;
break;
case POPUP:
x = 200;
y = 200;
x = (Math.random() * this.width) - 250;
y = (Math.random() * this.height) - 250;
if (x < 250) x = 1;
if (y < 250) y = 1;
break;
case DESKTOP_SHARING_VIEW:
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>
<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}"
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" />

View File

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

View File

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

View File

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

View File

@ -160,6 +160,14 @@
moderator = e.moderator;
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:TileList id="listenersList" height="100%" width="100%" itemClick="listenerSelectEvent(event);"

View File

@ -533,6 +533,11 @@
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>

View File

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

View File

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

View File

@ -25,7 +25,7 @@
implements="org.bigbluebutton.common.IBbbModuleWindow"
creationComplete="init()"
width="{camWidth + 6}" height="{camHeight + 73}"
title="Stream webcam"
title="{ResourceUtil.getInstance().getString('bbb.publishVideo.title')}"
backgroundImage="{bbbLogo}"
resizable="false"
xmlns:mate="http://mate.asfusion.com/">
@ -42,6 +42,7 @@
import org.bigbluebutton.modules.videoconf.events.CloseAllWindowsEvent;
import org.bigbluebutton.modules.videoconf.events.StartBroadcastEvent;
import org.bigbluebutton.modules.videoconf.events.StopBroadcastEvent;
import org.bigbluebutton.util.i18n.ResourceUtil;
private var images:Images = new Images();
[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>

View File

@ -20,14 +20,20 @@
$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>
<![CDATA[
import com.asfusion.mate.events.Dispatcher;
import org.bigbluebutton.common.Images;
import org.bigbluebutton.modules.videoconf.events.OpenPublishWindowEvent;
import com.asfusion.mate.events.Dispatcher;
import org.bigbluebutton.util.i18n.ResourceUtil;
[Bindable] public var isPresenter:Boolean;
private var images:Images = new Images();
[Bindable] public var camIcon:Class = images.webcam;

View File

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

View File

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

View File

@ -54,7 +54,7 @@
import org.bigbluebutton.util.i18n.ResourceUtil;
[Bindable]
private var windowTitle:String = ResourceUtil.getInstance().getString('bbb.viewers.title',["", ""]) ;
private var windowTitle:String = ResourceUtil.getInstance().getString('bbb.viewers.title',["", ""]);
[Bindable]
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>

View File

@ -38,9 +38,6 @@
GENTOO=$(uname -r | grep gentoo | cut -d- -f2);
TOMCAT=""
OLDEVENTIP=$(cat /opt/freeswitch/conf/autoload_configs/event_socket.conf.xml | grep 'name="listen-ip"' | cut -d\" -f4 | awk '{print $1}');
get_platform() {
@ -329,13 +326,18 @@ while [ $# -gt 0 ]; do
# all other parameters requires at least 1 argument
#
if [ $# -lt 2 ]; then
usage
exit 1
fi
#if [ $# -lt 2 ]; then
#usage
# exit 1
#fi
if [ "$1" = "-setip" -o "$1" = "--setip" ]; then
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
HOST=`echo ${2}|cut -d: -f1`
PORT=`echo ${2}|cut -d: -f2`
@ -346,18 +348,36 @@ while [ $# -gt 0 ]; do
if [ "$1" = "--setup-dev" -o "$1" = "-setup-dev" ]; then
SETUPDEV="${2}"
if test -z "${2}"; then
usage;
fi
shift; shift
continue
fi
if [ "$1" = "--conference" -o "$1" = "-conference" ]; then
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
continue
fi
if [ "$1" = "--salt" -o "$1" = "-salt" -o "$1" = "--set-salt" ]; then
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
continue
fi
@ -962,6 +982,10 @@ if [ $CHECK ]; then
MEM=`free -m | grep Mem | awk '{ print $2}'`
echo "Memory: $MEM MB"
if [ -e /etc/lsb-release ]; then
cat /etc/lsb-release;
fi
echo
echo "/var/www/bigbluebutton/client/conf/config.xml:"
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
#
# 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" \
$RED5_DIR/webapps/bigbluebutton/WEB-INF/bigbluebutton.properties