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:
parent
12fa929524
commit
b17025abfe
2
Gemfile
2
Gemfile
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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?
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -71,7 +71,7 @@
|
|||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul
|
||||
</ul>
|
||||
</div>
|
||||
{{/if}}
|
||||
</li>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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}}
|
|
@ -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' %>
|
||||
|
|
|
@ -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 %>
|
|
@ -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(){
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue