| Name | Total Lines | Lines of Code | Total Coverage | Code Coverage |
|---|---|---|---|---|
| app/controllers/grade_entry_forms_controller.rb | 264 | 211 | 80.30%
|
78.20%
|
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 }, |
34 :sorts => { 'last_name' => lambda { |
35 |a,b| a.last_name.downcase <=> |
36 b.last_name.downcase} } |
37 } |
38 |
39 # Create a new grade entry form |
40 def new |
41 @grade_entry_form = GradeEntryForm.new |
42 return unless request.post? |
43 |
44 # Process input properties |
45 @grade_entry_form.transaction do |
46 if @grade_entry_form.update_attributes(params[:grade_entry_form]) |
47 # Success message |
48 flash[:success] = I18n.t('grade_entry_forms.create.success') |
49 redirect_to :action => "edit", :id => @grade_entry_form.id |
50 end |
51 end |
52 end |
53 |
54 # Edit the properties of a grade entry form |
55 def edit |
56 @grade_entry_form = GradeEntryForm.find_by_id(params[:id]) |
57 return unless request.post? |
58 |
59 # Process changes to input properties |
60 @grade_entry_form.transaction do |
61 if @grade_entry_form.update_attributes(params[:grade_entry_form]) |
62 # Success message |
63 flash[:success] = I18n.t('grade_entry_forms.edit.success') |
64 redirect_to :action => "edit", :id => @grade_entry_form.id |
65 end |
66 end |
67 end |
68 |
69 # View/modify the grades for this grade entry form |
70 def grades |
71 @grade_entry_form = GradeEntryForm.find_by_id(params[:id]) |
72 @filter = 'none' |
73 |
74 # Pagination options |
75 @per_page = 15 |
76 @current_page = 1 |
77 @sort_by = 'last_name' |
78 @desc = false |
79 @filters = get_filters(G_TABLE_PARAMS) |
80 @per_pages = G_TABLE_PARAMS[:per_pages] |
81 |
82 all_students = get_filtered_items(G_TABLE_PARAMS, |
83 @filter, |
84 @sort_by, |
85 {:grade_entry_form => @grade_entry_form}) |
86 @students = all_students.paginate(:per_page => @per_page, |
87 :page => @current_page) |
88 @students_total = all_students.size |
89 @alpha_pagination_options = @grade_entry_form.alpha_paginate(all_students, |
90 @per_page, |
91 @students.total_pages) |
92 session[:alpha_pagination_options] = @alpha_pagination_options |
93 @alpha_category = @alpha_pagination_options.first |
94 end |
95 |
96 # Handle pagination for grades table |
97 # (The algorithm used to compute the alphabetical categories |
98 # (alpha_paginate()) is |
99 # found in grade_entry_form.rb.) |
100 def g_table_paginate |
101 @grade_entry_form = GradeEntryForm.find(params[:id]) |
102 @students, @students_total = handle_paginate_event( |
103 G_TABLE_PARAMS, |
104 {:grade_entry_form => @grade_entry_form}, |
105 params) |
106 |
107 @current_page = params[:page] |
108 @per_page = params[:per_page] |
109 @filters = get_filters(G_TABLE_PARAMS) |
110 @per_pages = G_TABLE_PARAMS[:per_pages] |
111 @desc = params[:desc] |
112 @filter = params[:filter] |
113 if !params[:sort_by].blank? |
114 @sort_by = params[:sort_by] |
115 else |
116 @sort_by = 'last_name' |
117 end |
118 |
119 # Only re-compute the alpha_pagination_options for the drop-down menu |
120 # if the number of items per page has changed |
121 if params[:update_alpha_pagination_options] == "true" |
122 all_students = get_filtered_items( |
123 G_TABLE_PARAMS, |
124 @filter, |
125 @sort_by, |
126 {:grade_entry_form => @grade_entry_form}) |
127 @alpha_pagination_options = @grade_entry_form.alpha_paginate( |
128 all_students, |
129 @per_page, |
130 @students.total_pages) |
131 @alpha_category = @alpha_pagination_options.first |
132 session[:alpha_pagination_options] = @alpha_pagination_options |
133 else |
134 @alpha_pagination_options = session[:alpha_pagination_options] |
135 @alpha_category = params[:alpha_category] |
136 end |
137 end |
138 |
139 # Update a grade in the table |
140 def update_grade |
141 grade_entry_form = GradeEntryForm.find_by_id(params[:id]) |
142 @student_id = params[:student_id] |
143 @grade_entry_item_id = params[:grade_entry_item_id] |
144 updated_grade = params[:updated_grade] |
145 grade_entry_student = |
146 grade_entry_form.grade_entry_students.find_or_create_by_user_id( |
147 @student_id) |
148 @grade = |
149 grade_entry_student.grades.find_or_create_by_grade_entry_item_id( |
150 @grade_entry_item_id) |
151 @grade.grade = updated_grade |
152 @grade_saved = @grade.save |
153 @updated_student_total = grade_entry_form.calculate_total_mark(@student_id) |
154 end |
155 |
156 # For students |
157 def student_interface |
158 @grade_entry_form = GradeEntryForm.find(params[:id]) |
159 @student = current_user |
160 end |
161 |
162 # Release/unrelease the marks for all the students or for a subset of students |
163 def update_grade_entry_students |
164 return unless request.post? |
165 grade_entry_form = GradeEntryForm.find_by_id(params[:id]) |
166 errors = [] |
167 grade_entry_students = [] |
168 |
169 if params[:ap_select_full] == 'true' |
170 |
171 # Make sure we have a filter |
172 if params[:filter].blank? |
173 raise I18n.t('grade_entry_forms.grades.expected_filter') |
174 end |
175 |
176 # Find the appropriate students using this filter |
177 students = G_TABLE_PARAMS[:filters][params[:filter]][:proc].call() |
178 students.each do |student| |
179 grade_entry_students.push(grade_entry_form.grade_entry_students.find_or_create_by_user_id(student.id)) |
180 end |
181 else |
182 # Particular students in the table were selected |
183 if params[:students].nil? |
184 errors.push(I18n.t('grade_entry_forms.grades.must_select_a_student')) |
185 else |
186 params[:students].each do |student_id| |
187 grade_entry_students.push(grade_entry_form.grade_entry_students.find_or_create_by_user_id(student_id)) |
188 end |
189 end |
190 end |
191 |
192 # Releasing/unreleasing marks should be logged |
193 log_message = "" |
194 if !params[:release_results].nil? |
195 numGradeEntryStudentsChanged = set_release_on_grade_entry_students( |
196 grade_entry_students, |
197 true, |
198 errors) |
199 log_message = I18n.t("markus_logger.marks_released_for_grade_entry_form", |
200 :grade_entry_form_id => grade_entry_form.id, |
201 :grade_entry_form => |
202 grade_entry_form.short_identifier, |
203 :number_students => numGradeEntryStudentsChanged) |
204 elsif !params[:unrelease_results].nil? |
205 numGradeEntryStudentsChanged = set_release_on_grade_entry_students( |
206 grade_entry_students, |
207 false, |
208 errors) |
209 log_message = I18n.t( |
210 "markus_logger.marks_unreleased_for_grade_entry_form", |
211 :grade_entry_form_id => grade_entry_form.id, |
212 :grade_entry_form => grade_entry_form.short_identifier, |
213 :number_students => numGradeEntryStudentsChanged) |
214 end |
215 |
216 # Display success message |
217 if numGradeEntryStudentsChanged > 0 |
218 flash[:success] = I18n.t('grade_entry_forms.grades.successfully_changed', |
219 {:numGradeEntryStudentsChanged => numGradeEntryStudentsChanged}) |
220 m_logger = MarkusLogger.instance |
221 m_logger.log(log_message) |
222 end |
223 flash[:errors] = errors |
224 |
225 redirect_to :action => 'grades', :id => params[:id] |
226 end |
227 |
228 # Download the grades for this grade entry form as a CSV file |
229 def csv_download |
230 grade_entry_form = GradeEntryForm.find(params[:id]) |
231 send_data grade_entry_form.get_csv_grades_report, |
232 :disposition => 'attachment', |
233 :type => 'application/vnd.ms-excel', |
234 :filename => "#{grade_entry_form.short_identifier}_grades_report.csv" |
235 end |
236 |
237 # Upload the grades for this grade entry form using a CSV file |
238 def csv_upload |
239 @grade_entry_form = GradeEntryForm.find(params[:id]) |
240 grades_file = params[:upload][:grades_file] |
241 if request.post? && !grades_file.blank? |
242 begin |
243 GradeEntryForm.transaction do |
244 invalid_lines = [] |
245 num_updates = GradeEntryForm.parse_csv(grades_file, |
246 @grade_entry_form, |
247 invalid_lines) |
248 if !invalid_lines.empty? |
249 flash[:invalid_lines] = invalid_lines |
250 flash[:error] = I18n.t('csv_invalid_lines') |
251 end |
252 if num_updates > 0 |
253 flash[:upload_notice] = I18n.t( |
254 'grade_entry_forms.csv.upload_success', |
255 :num_updates => num_updates) |
256 end |
257 end |
258 end |
259 end |
260 |
261 redirect_to :action => 'grades', :id => @grade_entry_form.id |
262 end |
263 |
264 end |
Generated on Wed Sep 08 00:10:30 -0400 2010 with rcov 0.9.8