diff --git a/app/controllers/bigbluebutton/rooms_controller.rb b/app/controllers/bigbluebutton/rooms_controller.rb
index de17b7d6..3449dd86 100644
--- a/app/controllers/bigbluebutton/rooms_controller.rb
+++ b/app/controllers/bigbluebutton/rooms_controller.rb
@@ -230,6 +230,12 @@ def join_mobile
@join_url.gsub!("http://", "bigbluebutton://")
end
+ def external
+ # TODO: error if params[:meeting].nil?
+
+ @room = BigbluebuttonRoom.new(:meetingid => params[:meeting])
+ end
+
protected
def find_server
diff --git a/app/models/bigbluebutton_server.rb b/app/models/bigbluebutton_server.rb
index d624127a..768af5a0 100644
--- a/app/models/bigbluebutton_server.rb
+++ b/app/models/bigbluebutton_server.rb
@@ -65,18 +65,16 @@ def fetch_meetings
response[:meetings].each do |attr|
room = BigbluebuttonRoom.find_by_server_id_and_meetingid(self.id, attr[:meetingID])
if room.nil?
- room = BigbluebuttonRoom.create(:server => self, :meetingid => attr[:meetingID],
- :name => attr[:meetingID], :attendee_password => attr[:attendeePW],
- :moderator_password => attr[:moderatorPW], :external => true,
- :randomize_meetingid => false)
+ room = BigbluebuttonRoom.new(:server => self, :meetingid => attr[:meetingID],
+ :name => attr[:meetingID], :attendee_password => attr[:attendeePW],
+ :moderator_password => attr[:moderatorPW], :external => true,
+ :randomize_meetingid => false)
else
room.update_attributes(:attendee_password => attr[:attendeePW],
:moderator_password => attr[:moderatorPW])
end
room.running = attr[:running]
- # TODO What if the update/save above fails?
-
@meetings << room
end
end
diff --git a/app/views/bigbluebutton/rooms/external.html.erb b/app/views/bigbluebutton/rooms/external.html.erb
new file mode 100644
index 00000000..7379e2bd
--- /dev/null
+++ b/app/views/bigbluebutton/rooms/external.html.erb
@@ -0,0 +1,23 @@
+
Join the meeting <%= @room.name %>
+
+<%= flash[:error] %>
+
+This meeting was created from another application.
You must provide a name and a password to join:
+
+<%= form_tag external_bigbluebutton_server_rooms_path(@server) do %>
+
+
+ Name:
+ <% if bigbluebutton_user.nil? %>
+ <%= text_field_tag "user[name]", "" %>
+ <% else %>
+ <%= text_field_tag "user[name]", bigbluebutton_user.name %>
+ <% end %>
+
+
+ Password:
+ <%= password_field_tag "user[password]", "" %>
+
+
+ <%= submit_tag "Submit" %>
+<% end %>
diff --git a/lib/bigbluebutton_rails/rails/routes.rb b/lib/bigbluebutton_rails/rails/routes.rb
index a88a1805..ea0ca1d3 100644
--- a/lib/bigbluebutton_rails/rails/routes.rb
+++ b/lib/bigbluebutton_rails/rails/routes.rb
@@ -83,6 +83,7 @@ def bigbluebutton_routes_default(*params) #:nodoc:
resources :servers, :controller => BigbluebuttonRails.controllers[:servers] do
get :activity, :on => :member
resources :rooms, :controller => BigbluebuttonRails.controllers[:rooms] do
+ get :external, :on => :collection
get :join, :on => :member
get :running, :on => :member
get :end, :on => :member
diff --git a/spec/controllers/bigbluebutton/rooms_controller_spec.rb b/spec/controllers/bigbluebutton/rooms_controller_spec.rb
index 21c47bc4..544995aa 100644
--- a/spec/controllers/bigbluebutton/rooms_controller_spec.rb
+++ b/spec/controllers/bigbluebutton/rooms_controller_spec.rb
@@ -910,5 +910,20 @@ def build_running_json(value, error=nil)
end # json responses
+ describe "#external" do
+ before { mock_server_and_api }
+ let(:user) { Factory.build(:user) }
+ let(:new_room) { BigbluebuttonRoom.new(:meetingid => 'my-meeting-id') }
+
+ context "for an anonymous user" do
+ before { controller.stub(:bigbluebutton_user).and_return(nil) }
+ before(:each) { get :external, :server_id => mocked_server.to_param, :meeting => new_room.meetingid }
+ it { should respond_with(:success) }
+ it { should render_template(:external) }
+ it { should assign_to(:room).with_kind_of(BigbluebuttonRoom) }
+ it { assigns(:room).meetingid.should be(new_room.meetingid) }
+ end
+ end
+
end
diff --git a/spec/models/bigbluebutton_server_spec.rb b/spec/models/bigbluebutton_server_spec.rb
index 48566a86..3e61e59e 100644
--- a/spec/models/bigbluebutton_server_spec.rb
+++ b/spec/models/bigbluebutton_server_spec.rb
@@ -204,7 +204,7 @@
server.meetings[2].attendee_password.should == "pass"
server.meetings[2].moderator_password.should == "pass"
server.meetings[2].running.should == true
- server.meetings[2].new_record?.should be_false
+ server.meetings[2].new_record?.should be_true
server.meetings[2].external.should be_true
server.meetings[2].randomize_meetingid.should be_false
end
diff --git a/spec/routing/bigbluebutton/rooms_routing_spec.rb b/spec/routing/bigbluebutton/rooms_routing_spec.rb
index 6415430d..30890bba 100644
--- a/spec/routing/bigbluebutton/rooms_routing_spec.rb
+++ b/spec/routing/bigbluebutton/rooms_routing_spec.rb
@@ -16,6 +16,10 @@
{:get => "/#{prefix}/servers/1/rooms/new"}.
should route_to(:controller => "bigbluebutton/rooms", :action => "new", :server_id => "1")
}
+ it {
+ {:get => "/#{prefix}/servers/1/rooms/external"}.
+ should route_to(:controller => "bigbluebutton/rooms", :action => "external", :server_id => "1")
+ }
it {
{:get => "/#{prefix}/servers/1/rooms/1/edit"}.
should route_to(:controller => "bigbluebutton/rooms", :action => "edit", :server_id => "1", :id => "1")