Skip to content

Commit 0ff4a72

Browse files
author
Irene
committed
Add export as csv for part specific points
1 parent 92c6d4e commit 0ff4a72

File tree

5 files changed

+39
-4
lines changed

5 files changed

+39
-4
lines changed

app/controllers/points_controller.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ def show
8181
end
8282
respond_to do |format|
8383
format.html
84+
format.csv do
85+
render_csv(filename: "#{@course.name}_#{@sheetname}_points.csv")
86+
end
8487
format.json do
8588
output = {
8689
api_version: ApiVersion::API_VERSION,

app/views/points/show.csv.erb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<% require 'portable_csv' %>
2+
<%= PortableCSV.generate(:force_quotes => true) do |csv|
3+
arr = ["Username"]
4+
arr += @user_fields.map(&:label) if @user_fields
5+
arr += @exercises.map{ |exercise| [exercise[:name]] + (exercise.available_points.length > 1 ? [nil] * (exercise.available_points.length-1) : []) }.flatten
6+
csv << arr
7+
8+
arr = [nil]
9+
arr += [nil] * @user_fields.length if @user_fields
10+
arr += @exercises.map{|exercise| exercise.available_points.sort.map{|point| point.name }}.flatten
11+
csv << arr
12+
13+
@users.each do |user, index|
14+
user_points = @users_to_points[user.login]
15+
arr = [user.login]
16+
if @user_fields
17+
@user_fields.each do |field|
18+
value = user.user_field_values.find { |o| o.field_name == field.name }
19+
arr += [value.value] if value
20+
end
21+
end
22+
@exercises.each do |exercise|
23+
exercise.available_points.sort.each do |p|
24+
arr += user_points.include?(p.name) ? [1] : [nil]
25+
end
26+
end
27+
csv << arr
28+
end
29+
end.html_safe %>

app/views/points/show.html.erb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,14 @@
66

77
<div class="alternative-options-links">
88
<% if params[:sort_by].blank? %>
9-
<%= link_to('Sort by points', organization_course_point_path(@organization, @course, @sheetname, sort_by: 'points', show_attempted: params[:show_attempted]), class: "btn btn-primary")%>
9+
<%= link_to 'Sort by points', organization_course_point_path(@organization, @course, @sheetname, :sort_by => 'points'),class: "btn btn-primary" %>
1010
<% else %>
1111
<%= link_to('Sort by username', organization_course_point_path(@organization, @course, @sheetname, show_attempted: params[:show_attempted]), class: "btn btn-primary") %>
1212
<% end %>
13-
13+
<% if can?(:teach, @course) %>
14+
<%= link_to('Export as CSV', organization_course_point_path(@organization, @course, @sheetname, :sort_by => params[:sort_by], :format => 'csv'), class: "btn btn-primary") %>
15+
<% end %>
16+
</div>
1417
<% if can? :refresh_gdocs_spreadsheet, @course %>
1518
<% link_to 'Refresh Google Docs worksheet', refresh_gdocs_organization_course_point_path(@organization, @course, @sheetname), class: "btn btn-primary" %>
1619
<% end %>

ext/tmc-langs

Submodule tmc-langs updated 360 files

0 commit comments

Comments
 (0)