| Name | Total Lines | Lines of Code | Total Coverage | Code Coverage |
|---|---|---|---|---|
| app/controllers/grade_entry_forms_controller.rb | 267 | 213 | 87.64%
|
86.38%
|
Code reported as executed by Ruby looks like this...and this: this line is also marked as covered.Lines considered as run by rcov, but not reported by Ruby, look like this,and this: these lines were inferred by rcov (using simple heuristics).Finally, here's a line marked as not executed.
1 # The actions necessary for managing grade entry forms. |
2 |
3 class GradeEntryFormsController < ApplicationController |
4 include PaginationHelper |
5 include GradeEntryFormsHelper |
6 |
7 before_filter :authorize_only_for_admin, |
8 :except => [:student_interface, |
9 :grades, |
10 :g_table_paginate, |
11 :csv_download, |
12 :csv_upload, |
13 :update_grade] |
14 before_filter :authorize_for_ta_and_admin, |
15 :only => [:grades, |
16 :g_table_paginate, |
17 :csv_download, |
18 :csv_upload, |
19 :update_grade] |
20 before_filter :authorize_for_student, |
21 :only => [:student_interface] |
22 |
23 # Filters will be added as the student UI is implemented (eg. Show Released, |
24 # Show All,...) |
25 G_TABLE_PARAMS = {:model => GradeEntryStudent, |
26 :per_pages => [15, 30, 50, 100, 150], |
27 :filters => {'none' => { |
28 :display => 'Show All', |
29 :proc => lambda { |
30 Student.all(:conditions => { |
31 :hidden => false}, |
32 :order => "user_name")}}}, |
33 :sorts => {'last_name' => lambda { |
34 |a,b| a.last_name.downcase <=> |
35 b.last_name.downcase}}} |
36 |
37 # Create a new grade entry form |
38 def new |
39 @grade_entry_form = GradeEntryForm.new |
40 end |
41 |
42 def create |
43 @grade_entry_form = GradeEntryForm.new |
44 |
45 # Process input properties |
46 @grade_entry_form.transaction do |
47 if @grade_entry_form.update_attributes(params[:grade_entry_form]) |
48 # Success message |
49 flash[:success] = I18n.t('grade_entry_forms.create.success') |
50 redirect_to :action => "edit", :id => @grade_entry_form.id |
51 else |
52 render "new" |
53 end |
54 end |
55 end |
56 |
57 # Edit the properties of a grade entry form |
58 def edit |
59 @grade_entry_form = GradeEntryForm.find(params[:id]) |
60 end |
61 |
62 def update |
63 @grade_entry_form = GradeEntryForm.find(params[:id]) |
64 # Process changes to input properties |
65 @grade_entry_form.transaction do |
66 if @grade_entry_form.update_attributes(params[:grade_entry_form]) |
67 # Success message |
68 flash[:success] = I18n.t('grade_entry_forms.edit.success') |
69 redirect_to :action => "edit", :id => @grade_entry_form.id |
70 else |
71 render "edit", :id => @grade_entry_form.id |
72 end |
73 end |
74 end |
75 |
76 # View/modify the grades for this grade entry form |
77 def grades |
78 @grade_entry_form = GradeEntryForm.find(params[:id]) |
79 @filter = 'none' |
80 |
81 # Pagination options |
82 @per_page = 15 |
83 @current_page = 1 |
84 @sort_by = 'last_name' |
85 @desc = false |
86 @filters = get_filters(G_TABLE_PARAMS) |
87 @per_pages = G_TABLE_PARAMS[:per_pages] |
88 |
89 all_students = get_filtered_items(G_TABLE_PARAMS, |
90 @filter, |
91 @sort_by, |
92 {:grade_entry_form => @grade_entry_form}) |
93 @students = all_students.paginate(:per_page => @per_page, |
94 :page => @current_page) |
95 @students_total = all_students.size |
96 @alpha_pagination_options = @grade_entry_form.alpha_paginate(all_students, |
97 @per_page, |
98 @students.total_pages) |
99 session[:alpha_pagination_options] = @alpha_pagination_options |
100 @alpha_category = @alpha_pagination_options.first |
101 end |
102 |
103 # Handle pagination for grades table |
104 # (The algorithm used to compute the alphabetical categories |
105 # (alpha_paginate()) is |
106 # found in grade_entry_form.rb.) |
107 def g_table_paginate |
108 @grade_entry_form = GradeEntryForm.find(params[:id]) |
109 @students, @students_total = handle_paginate_event( |
110 G_TABLE_PARAMS, |
111 {:grade_entry_form => @grade_entry_form}, |
112 params) |
113 |
114 @current_page = params[:page] |
115 @per_page = params[:per_page] |
116 @filters = get_filters(G_TABLE_PARAMS) |
117 @per_pages = G_TABLE_PARAMS[:per_pages] |
118 @desc = params[:desc] |
119 @filter = params[:filter] |
120 if !params[:sort_by].blank? |
121 @sort_by = params[:sort_by] |
122 else |
123 @sort_by = 'last_name' |
124 end |
125 |
126 # Only re-compute the alpha_pagination_options for the drop-down menu |
127 # if the number of items per page has changed |
128 if params[:update_alpha_pagination_options] == "true" |
129 all_students = get_filtered_items( |
130 G_TABLE_PARAMS, |
131 @filter, |
132 @sort_by, |
133 {:grade_entry_form => @grade_entry_form}) |
134 @alpha_pagination_options = @grade_entry_form.alpha_paginate( |
135 all_students, |
136 @per_page, |
137 @students.total_pages) |
138 @alpha_category = @alpha_pagination_options.first |
139 session[:alpha_pagination_options] = @alpha_pagination_options |
140 else |
141 @alpha_pagination_options = session[:alpha_pagination_options] |
142 @alpha_category = params[:alpha_category] |
143 end |
144 end |
145 |
146 # Update a grade in the table |
147 def update_grade |
148 grade_entry_form = GradeEntryForm.find_by_id(params[:id]) |
149 @student_id = params[:student_id] |
150 @grade_entry_item_id = params[:grade_entry_item_id] |
151 updated_grade = params[:updated_grade] |
152 grade_entry_student = |
153 grade_entry_form.grade_entry_students.find_or_create_by_user_id( |
154 @student_id) |
155 @grade = |
156 grade_entry_student.grades.find_or_create_by_grade_entry_item_id( |
157 @grade_entry_item_id) |
158 @grade.grade = updated_grade |
159 @grade_saved = @grade.save |
160 @updated_student_total = grade_entry_form.calculate_total_mark(@student_id) |
161 end |
162 |
163 # For students |
164 def student_interface |
165 @grade_entry_form = GradeEntryForm.find(params[:id]) |
166 @student = current_user |
167 end |
168 |
169 # Release/unrelease the marks for all the students or for a subset of students |
170 def update_grade_entry_students |
171 return unless request.post? |
172 grade_entry_form = GradeEntryForm.find_by_id(params[:id]) |
173 errors = [] |
174 grade_entry_students = [] |
175 |
176 if params[:ap_select_full] == 'true' |
177 |
178 # Make sure we have a filter |
179 if params[:filter].blank? |
180 raise I18n.t('grade_entry_forms.grades.expected_filter') |
181 end |
182 |
183 # Find the appropriate students using this filter |
184 students = G_TABLE_PARAMS[:filters][params[:filter]][:proc].call() |
185 students.each do |student| |
186 grade_entry_students.push(grade_entry_form.grade_entry_students.find_or_create_by_user_id(student.id)) |
187 end |
188 else |
189 # Particular students in the table were selected |
190 if params[:students].nil? |
191 errors.push(I18n.t('grade_entry_forms.grades.must_select_a_student')) |
192 else |
193 params[:students].each do |student_id| |
194 grade_entry_students.push(grade_entry_form.grade_entry_students.find_or_create_by_user_id(student_id)) |
195 end |
196 end |
197 end |
198 |
199 # Releasing/unreleasing marks should be logged |
200 log_message = "" |
201 if !params[:release_results].nil? |
202 numGradeEntryStudentsChanged = set_release_on_grade_entry_students( |
203 grade_entry_students, |
204 true, |
205 errors) |
206 log_message = "Marks released for marks spreadsheet '" + |
207 "#{grade_entry_form.short_identifier}', ID: '#{grade_entry_form.id}' " + |
208 "(for #{numGradeEntryStudentsChanged} students)." |
209 elsif !params[:unrelease_results].nil? |
210 numGradeEntryStudentsChanged = set_release_on_grade_entry_students( |
211 grade_entry_students, |
212 false, |
213 errors) |
214 log_message = "Marks unreleased for marks spreadsheet '" + |
215 "#{grade_entry_form.short_identifier}', ID: '#{grade_entry_form.id}' " + |
216 "(for #{numGradeEntryStudentsChanged} students)." |
217 end |
218 |
219 # Display success message |
220 if numGradeEntryStudentsChanged > 0 |
221 flash[:success] = I18n.t('grade_entry_forms.grades.successfully_changed', |
222 {:numGradeEntryStudentsChanged => numGradeEntryStudentsChanged}) |
223 m_logger = MarkusLogger.instance |
224 m_logger.log(log_message) |
225 end |
226 flash[:errors] = errors |
227 |
228 redirect_to :action => 'grades', :id => params[:id] |
229 end |
230 |
231 # Download the grades for this grade entry form as a CSV file |
232 def csv_download |
233 grade_entry_form = GradeEntryForm.find(params[:id]) |
234 send_data grade_entry_form.get_csv_grades_report, |
235 :disposition => 'attachment', |
236 :type => 'application/vnd.ms-excel', |
237 :filename => "#{grade_entry_form.short_identifier}_grades_report.csv" |
238 end |
239 |
240 # Upload the grades for this grade entry form using a CSV file |
241 def csv_upload |
242 @grade_entry_form = GradeEntryForm.find(params[:id]) |
243 grades_file = params[:upload][:grades_file] |
244 if request.post? && !grades_file.blank? |
245 begin |
246 GradeEntryForm.transaction do |
247 invalid_lines = [] |
248 num_updates = GradeEntryForm.parse_csv(grades_file, |
249 @grade_entry_form, |
250 invalid_lines) |
251 if !invalid_lines.empty? |
252 flash[:invalid_lines] = invalid_lines |
253 flash[:error] = I18n.t('csv_invalid_lines') |
254 end |
255 if num_updates > 0 |
256 flash[:upload_notice] = I18n.t( |
257 'grade_entry_forms.csv.upload_success', |
258 :num_updates => num_updates) |
259 end |
260 end |
261 end |
262 end |
263 |
264 redirect_to :action => 'grades', :id => @grade_entry_form.id |
265 end |
266 |
267 end |
Generated on Sun Feb 05 00:08:06 -0500 2012 with rcov 0.9.10