Class FlexibleCriteriaController
In: app/controllers/flexible_criteria_controller.rb
Parent: ApplicationController

Methods

delete   download   edit   index   move_criterion   new   update   update_positions   upload  

Public Instance methods

[Source]

    # 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

[Source]

    # 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

[Source]

    # File app/controllers/flexible_criteria_controller.rb, line 13
13:   def edit 
14:     @criterion = FlexibleCriterion.find(params[:id])
15:   end

[Source]

    # 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

[Source]

     # 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

[Source]

    # 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

[Source]

    # 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

[Source]

     # 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

[Source]

    # 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

[Validate]