add scheduling support to conferences

refs PS-894

test-plan:
requires g/27337 to test functionality
* conferences should behave the same without g/27337

Change-Id: I546e806897fa35bc93b983da2d149e312f502d2d
Reviewed-on: https://gerrit.instructure.com/27338
Reviewed-by: Braden Anderson <banderson@instructure.com>
Product-Review: Adam Phillipps <adam@instructure.com>
QA-Review: Adam Phillipps <adam@instructure.com>
Tested-by: Jenkins <jenkins@instructure.com>
This commit is contained in:
Nathan Mills 2013-12-12 11:37:20 -07:00
parent 12fa929524
commit b17025abfe
11 changed files with 99 additions and 5 deletions

View File

@ -39,7 +39,7 @@ gem 'builder', '3.0.0'
# enforce the version of bundler itself, to avoid any surprises
gem 'bundler', '1.3.5'
gem 'canvas_connect', '0.3.1'
gem 'canvas_webex', '0.7'
gem 'canvas_webex', '0.8'
gem 'daemons', '1.1.0'
gem 'diff-lcs', '1.1.3', :require => 'diff/lcs'
if CANVAS_RAILS2

View File

@ -1187,6 +1187,7 @@ class CoursesController < ApplicationController
@contexts += @user_groups if @user_groups
end
@current_conferences = @context.web_conferences.select{|c| c.active? && c.users.include?(@current_user) }
@scheduled_conferences = @context.web_conferences.select{|c| c.scheduled? && c.users.include?(@current_user)}
@stream_items = @current_user.try(:cached_recent_stream_items, { :contexts => @contexts }) || []
end

View File

@ -290,6 +290,7 @@ class GroupsController < ApplicationController
return
end
@current_conferences = @group.web_conferences.select{|c| c.active? && c.users.include?(@current_user) } rescue []
@scheduled_conferences = @context.web_conferences.select{|c| c.scheduled? && c.users.include?(@current_user)} rescue []
@stream_items = @current_user.try(:cached_recent_stream_items, { :contexts => @context }) || []
if params[:join] && @group.grants_right?(@current_user, :join)
if @group.full?

View File

@ -272,6 +272,16 @@ class WebConference < ActiveRecord::Base
self.ended_at = nil
self.save
end
# Default implementation since most implementations don't support scheduling yet
def scheduled?
self.started_at.nil? && scheduled_date && scheduled_date > Time.now
end
# Default implementation since most implementations don't support scheduling yet
def scheduled_date
nil
end
def active?(force_check=false)
if !force_check

View File

@ -71,7 +71,7 @@
</div>
</li>
{{/each}}
</ul
</ul>
</div>
{{/if}}
</li>

View File

@ -14,6 +14,9 @@
{{/if}}
<div class="ig-details row-fluid">
<div class="span4 ellipses">{{description}}</div>
{{#if scheduled}}
<div class="span4 ellipses">{{datetimeFormatted scheduled_at}}</div>
{{/if}}
<div class="span4 ellipses {{#if has_actions}}has_actions{{/if}}">
{{#if started_at}}
<span class="label label-success">{{#t "in_progress"}}In Progress{{/t}}</span>

View File

@ -12,7 +12,8 @@
>
{{description}}
</label>
{{else}} {{#if isText}}
{{/if}}
{{#if isText}}
<label for="web_conference_user_settings_{{field}}">
{{description}}
<input
@ -22,5 +23,18 @@
value="{{value}}"
{{#if ../../conference_started}}disabled="disabled"{{/if}}
>
{{/if}}{{/if}}
{{/if}}
{{#if isDatePicker}}
<label for="web_conference_user_settings_{{field}}">
{{description}}
<input
class="date_entry"
id="web_conference_user_settings_{{field}}"
name="web_conference[user_settings][{{field}}]"
size="30"
type="text"
value="{{value}}"
{{#if ../../conference_started}}disabled="disabled"{{/if}}
>
{{/if}}
{{/each}}

View File

@ -3,5 +3,6 @@
http://www.w3.org/TR/wai-aria/roles#document_structure_roles %>
<%= render :partial => 'shared/account_notification', :collection => @announcements %>
<%= render :partial => 'users/current_conference', :collection => @current_conferences %>
<%= render :partial => 'users/scheduled_conference', :collection => @scheduled_conferences %>
<%= render :partial => 'users/welcome' %>
<%= render :partial => 'users/cc_prefs' %>

View File

@ -0,0 +1,21 @@
<% conference = scheduled_conference %>
<% if conference.scheduled? && can_do(conference, @current_user, :join) %>
<div class="global-message image-block conference">
<div class="image-block-image">
<i class="information-icon"></i>
<span class="hidden-inline-text">
<%= accessible_message_icon_text("information") %>
</span>
</div>
<div class="image-block-content">
<div class="message">
<p><%=
mt(:current_conference_text, "You have been invited to join %{conference}. It starts on %{starts_at}.", {
:conference => conference.title,
:starts_at => datetime_string(conference.scheduled_date)
})
%></p>
</div>
</div>
</div>
<% end %>

View File

@ -15,7 +15,8 @@ define([
'jquery.keycodes' /* keycodes */,
'jquery.loadingImg' /* loadingImage */,
'compiled/jquery.rails_flash_notifications',
'jquery.templateData' /* fillTemplateData, getTemplateData */
'jquery.templateData' /* fillTemplateData, getTemplateData */,
'jquery.instructure_date_and_time' /* parseFromISO, date_field */
], function(INST, I18n, $, _, newConferenceTemplate, concludedConferenceTemplate, editConferenceFormTemplate, userSettingOptionsTemplate) {
@ -29,6 +30,8 @@ define([
conferenceData['recording'] = conferenceData.recordings[0];
conferenceData['recordingCount'] = conferenceData.recordings.length;
conferenceData['multipleRecordings'] = conferenceData.recordingCount > 1;
conferenceData['scheduled'] = 'scheduled_date' in conferenceData.user_settings
conferenceData['scheduled_at'] = conferenceData.user_settings.scheduled_date
$conference_row = $(newConferenceTemplate(conferenceData));
$conference_row.data('conference', conferenceData);
return $conference_row;
@ -89,6 +92,16 @@ define([
case 'text':
optionObj['isText'] = true;
optionObj['value'] = currentVal;
break;
case 'date_picker':
if(currentVal){
optionObj['value'] = $.parseFromISO(currentVal).datetime.toString($.datetime.defaultFormat)
}
else{
optionObj['value'] = currentVal;
}
optionObj['isDatePicker'] = true;
break;
}
});
});
@ -122,6 +135,12 @@ define([
conference: conferenceData,
conference_started: !!conferenceData['started_at']
}));
$('.date_entry').each(function() {
if(!this.disabled){
$(this).datetime_field({alwaysShowTime: true});
}
});
//$(".date_entry").datetime_field({alwaysShowTime: true});
};
var updatedConferenceListCount = function(){

View File

@ -209,4 +209,28 @@ describe WebConference do
conference.messages_sent['Web Conference Invitation'].should be_blank
end
end
context "scheduled conferences" do
before do
course_with_student(:active_all => 1)
@conference = WimbaConference.create!(:title => "my conference", :user => @user, :duration => 60, :context => course)
end
it "has a start date" do
@conference.start_at = Time.now
@conference.scheduled?.should be_false
end
it "has a schduled date in the past" do
@conference.stubs(:scheduled_date).returns(Time.now - 10.days)
@conference.scheduled?.should be_false
end
it "has a schduled date in the future" do
@conference.stubs(:scheduled_date).returns(Time.now + 10.days)
@conference.scheduled?.should be_true
end
end
end