publish multiple quizzes at the same time

When we import quizzes from another system we leave
them all unpublished so the teacher can review
the import results before publishing.  This adds
a "Publish Multiple Quizzes" button that will,
well, publish multiple quizzes -- at the same time.

fixes #3636

Change-Id: I9b762da0e938a0b2e1986e3bdb9a216dd5bc7142
Reviewed-on: https://gerrit.instructure.com/2175
Tested-by: Hudson <hudson@instructure.com>
Reviewed-by: Bracken Mosbacker <bracken@instructure.com>
This commit is contained in:
Brian Whitmer 2011-02-07 09:44:01 -07:00
parent c917bc8c1b
commit 00124e9566
5 changed files with 60 additions and 1 deletions

View File

@ -176,6 +176,20 @@ class QuizzesController < ApplicationController
end
protected :take_quiz
def publish
if authorized_action(@context, @current_user, :manage_assignments)
@quizzes = @context.quizzes.active.find_all_by_id(params[:quizzes]).compact.select{|q| !q.available? }
@quizzes.each do |quiz|
quiz.generate_quiz_data
quiz.published_at = Time.now
quiz.workflow_state = 'available'
quiz.save
end
flash[:notice] = "#{@quizzes.length} quizzes successfully published!"
redirect_to named_context_url(@context, :context_quizzes_url)
end
end
def reorder
if authorized_action(@quiz, @current_user, :update)
items = []

View File

@ -15,6 +15,7 @@
<% end %>
</div>
<a href="<%= context_url(@context, :context_quiz_url, q) %>" class="quiz_title"><%= q.quiz_title || q.readable_type %></a>
<span class="quiz_id" style="display: none;"><%= (q && q.id) || nbsp %></span>
<% if q && q.assignment_id %>
<span style="font-size: 0.8em; font-weight: normal;">(<%= pluralize(q.assignment.points_possible, "pt") if q.assignment.points_possible %>)</span>
<% end %>

View File

@ -9,6 +9,9 @@
<% if can_do(@context, @current_user, :manage_assignments) && feature_enabled?(:question_banks) %>
<a href="<%= context_url(@context, :context_question_banks_url) %>" class="button button-sidebar-wide"><%= image_tag "edit.png" %> Manage Question Banks</a>
<% end %>
<% if can_do(@context, @current_user, :manage_assignments) && @unpublished_quizzes.length > 1 %>
<a href="#" class="button button-sidebar-wide publish_multiple_quizzes_link">Publish Multiple Quizzes</a>
<% end %>
</div>
<% end %>
<% end %>
@ -40,9 +43,25 @@ ul.quiz_list li.quiz div.description {
<% end %>
<% if can_do(@context, @current_user, :manage_assignments) && @unpublished_quizzes && !@unpublished_quizzes.empty? %>
<h2>Unpublished Quizzes</h2>
<ul class="quiz_list">
<ul class="quiz_list" id="unpublished_quizzes">
<%= render :partial => "quiz_summary", :collection => @unpublished_quizzes, :locals => {:unpublished => true} %>
</ul>
<div id="publish_multiple_quizzes_dialog" style="display: none;">
<% form_tag context_url(@context, :context_quizzes_publish_url), :id => "publish_quizzes_form" do %>
<h3>Publish Multiple Quizzes</h3>
Select the quizzes you would like to publish at this time:
<ul class="quiz_list unstyled_list">
<li class="quiz_item blank" style="display: none;">
<input type="checkbox" value="1" name="quizzes[]" class="id"/>
<label class="title">&nbsp;</label>
</li>
</ul>
<div class="button-container">
<button type="submit" class="button submit_button">Publish Quizzes</button>
<button type="button" class="button button-secondary cancel_button">Cancel</button>
</div>
<% end %>
</div>
<% end %>
<% if @assignment_quizzes.empty? && @open_quizzes.empty? %>
<h2>Course Quizzes</h2>

View File

@ -165,6 +165,7 @@ ActionController::Routing::Routes.draw do |map|
course.resources :assessment_questions do |question|
question.move_question 'move', :controller => 'assessment_questions', :action => 'move'
end
course.quizzes_publish 'quizzes/publish', :controller => 'quizzes', :action => 'publish'
course.resources :quizzes do |quiz|
quiz.reorder "reorder", :controller => "quizzes", :action => "reorder"
quiz.history "history", :controller => "quizzes", :action => "history"

View File

@ -27,6 +27,30 @@ $(document).ready(function() {
}
});
});
$(".publish_multiple_quizzes_link").click(function(event) {
event.preventDefault();
var $dialog = $("#publish_multiple_quizzes_dialog");
var $template = $dialog.find(".quiz_item.blank:first").clone(true);
var $list = $dialog.find(".quiz_list").find(".quiz_item:not(.blank)").remove().end();
$("#unpublished_quizzes .quiz").each(function() {
var $quiz_item = $template.clone(true);
var data = $(this).getTemplateData({textValues: ['quiz_id', 'quiz_title']});
$quiz_item.find(".id").val(data.quiz_id).attr('id', 'quiz_checkbox_' + data.quiz_id).end()
.find(".title").text(data.quiz_title || 'Unnamed Quiz').attr('for', 'quiz_checkbox_' + data.quiz_id);
$list.append($quiz_item.show());
});
$dialog.find("button").attr('disabled', false);
$dialog.dialog('close').dialog({
autoOpen: false,
width: 400
}).dialog('open');
});
$("#publish_quizzes_form").submit(function() {
$(this).find("button").attr('disabled', true).filter('.submit_button').text('Publishing Quizzes...');
});
$("#publish_multiple_quizzes_dialog .cancel_button").click(function() {
$("#publish_multiple_quizzes_dialog").dialog('close');
});
if($("#quiz_locks_url").length > 0) {
var data = {};
var assets = [];