| Class | FlexibleCriteriaController |
| In: |
app/controllers/flexible_criteria_controller.rb
|
| Parent: | ApplicationController |
# File app/controllers/flexible_criteria_controller.rb, line 51
51: def delete
52: return unless request.delete?
53: @criterion = FlexibleCriterion.find(params[:id])
54: @assignment = @criterion.assignment
55: @criteria = @assignment.flexible_criteria
56: # TODO delete all marks associated with this criterion
57: # Will be possible when Mark gets its association with FlexibleCriterion.
58: @criterion.destroy
59: flash.now[:success] = I18n.t('criterion_deleted_success')
60: end
# File app/controllers/flexible_criteria_controller.rb, line 62
62: def download
63: @assignment = Assignment.find(params[:id])
64: file_out = FlexibleCriterion.create_csv(@assignment)
65: send_data(file_out,
66: :type => 'text/csv',
67: :filename => "#{@assignment.short_identifier}_flexible_criteria.csv",
68: :disposition => 'inline')
69: end
# File app/controllers/flexible_criteria_controller.rb, line 13
13: def edit
14: @criterion = FlexibleCriterion.find(params[:id])
15: end
# File app/controllers/flexible_criteria_controller.rb, line 5
5: def index
6: @assignment = Assignment.find(params[:id])
7: # TODO until Assignment gets its criteria method
8: @criteria =
9: FlexibleCriterion.find_all_by_assignment_id( @assignment.id,
10: :order => :position)
11: end
This method handles the arrows
# File app/controllers/flexible_criteria_controller.rb, line 111
111: def move_criterion
112: position = params[:position].to_i
113: unless request.post?
114: render :nothing => true
115: return
116: end
117: if params[:direction] == 'up'
118: offset = -1
119: elsif params[:direction] == 'down'
120: offset = 1
121: else
122: render :nothing => true
123: return
124: end
125: @assignment = Assignment.find(params[:aid])
126: @criteria = @assignment.flexible_criteria
127: criterion = @criteria.find(params[:id])
128: index = @criteria.index(criterion)
129: other_criterion = @criteria[index + offset]
130: if other_criterion.nil?
131: render :nothing => true
132: return
133: end
134: FlexibleCriterion.update(criterion.id,
135: :position => other_criterion.position)
136: FlexibleCriterion.update(other_criterion.id, :position => position)
137: @criteria.reload
138: end
# File app/controllers/flexible_criteria_controller.rb, line 26
26: def new
27: @assignment = Assignment.find(params[:id])
28: if !request.post?
29: return
30: else
31: @criteria = @assignment.flexible_criteria
32: if @criteria.length > 0
33: new_position = @criteria.last.position + 1
34: else
35: new_position = 1
36: end
37: @criterion = FlexibleCriterion.new
38: @criterion.assignment = @assignment
39: @criterion.max = FlexibleCriterion::DEFAULT_MAX
40: @criterion.position = new_position
41: if !@criterion.update_attributes(params[:flexible_criterion])
42: @errors = @criterion.errors
43: render :action => 'add_criterion_error'
44: return
45: end
46: @criteria.reload
47: render :action => 'create_and_edit'
48: end
49: end
# File app/controllers/flexible_criteria_controller.rb, line 17
17: def update
18: @criterion = FlexibleCriterion.find(params[:id])
19: if !@criterion.update_attributes(params[:flexible_criterion])
20: render :action => 'errors'
21: return
22: end
23: flash.now[:success] = I18n.t('criterion_saved_success')
24: end
This method handles the drag/drop criteria sorting
# File app/controllers/flexible_criteria_controller.rb, line 96
96: def update_positions
97: unless request.post?
98: render :nothing => true
99: return
100: end
101: @assignment = Assignment.find(params[:aid])
102: @criteria = @assignment.flexible_criteria
103: params[:flexible_criteria_pane_list].each_with_index do |id, position|
104: if id != ""
105: FlexibleCriterion.update(id, :position => position + 1)
106: end
107: end
108: end
# File app/controllers/flexible_criteria_controller.rb, line 71
71: def upload
72: file = params[:upload][:flexible]
73: @assignment = Assignment.find(params[:id])
74: if request.post? && !file.blank?
75: begin
76: FlexibleCriterion.transaction do
77: invalid_lines = []
78: nb_updates = FlexibleCriterion.parse_csv(file,
79: @assignment,
80: invalid_lines)
81: unless invalid_lines.empty?
82: flash[:invalid_lines] = invalid_lines
83: flash[:error] = I18n.t('csv_invalid_lines')
84: end
85: if nb_updates > 0
86: flash[:upload_notice] = I18n.t('flexible_criteria.upload.success',
87: :nb_updates => nb_updates)
88: end
89: end
90: end
91: end
92: redirect_to :action => 'index', :id => @assignment.id
93: end