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")