|
|
Line 30: |
Line 30: |
| == Files changes == | | == Files changes == |
|
| |
|
| === views ===
| | * Controller |
| In ·app/controllers/impersonate_controller.rb·
| | app/controllers/impersonate_controller.rb |
| | | * Tests |
| <pre>
| |
| <script>
| |
| ...
| |
| $(function() {
| |
| $("#assignment_form_assignment_name").change(function() {
| |
| filename = $( "#assignment_form_assignment_name" ).val().replace(/ /g,"_").replace(/[/\\?%*:|"<>/$&!#%^@]/g, '');;
| |
| $('#assignment_form_assignment_directory_path').val(filename);
| |
| });
| |
| });
| |
| | |
| function autogenerate_submission(){
| |
| assignment_form.assignment.directory_path = assignment_form.assignment.name;
| |
| }
| |
| </script>
| |
| </pre>
| |
| | |
| === models ===
| |
| The following code was added to <b>app/models/assignment.rb</b>'s Assignment class, to add validation for assignment name and directory.
| |
| <pre>
| |
| validates :directory_path, presence: true # E2138 Validation for unique submission directory
| |
| validates :directory_path, uniqueness: {scope: :course_id}
| |
| </pre>
| |
| | |
| === controllers ===
| |
| The following code was modified in <b>app/controllers/assignments_controller.rb</b>'s create method, adding checks for assignment name and directory when creating assignment.
| |
| | |
| '''Before'''
| |
| <pre>
| |
| def create
| |
| @assignment_form = AssignmentForm.new(assignment_form_params)
| |
| if params[:button]
| |
| if @assignment_form.save
| |
| @assignment_form.create_assignment_node
| |
| exist_assignment = Assignment.find_by(id: @assignment_form.assignment.id)
| |
| assignment_form_params[:assignment][:id] = exist_assignment.id.to_s
| |
| if assignment_form_params[:assignment][:directory_path].blank?
| |
| assignment_form_params[:assignment][:directory_path] = "assignment_#{assignment_form_params[:assignment][:id]}"
| |
| end
| |
| ques_array = assignment_form_params[:assignment_questionnaire]
| |
| due_array = assignment_form_params[:due_date]
| |
| ques_array.each do |cur_questionnaire|
| |
| cur_questionnaire[:assignment_id] = exist_assignment.id.to_s
| |
| end
| |
| due_array.each do |cur_due|
| |
| cur_due[:parent_id] = exist_assignment.id.to_s
| |
| end
| |
| assignment_form_params[:assignment_questionnaire] = ques_array
| |
| assignment_form_params[:due_date] = due_array
| |
| @assignment_form.update(assignment_form_params, current_user)
| |
| aid = Assignment.find_by(id: @assignment_form.assignment.id).id
| |
| ExpertizaLogger.info "Assignment created: #{@assignment_form.as_json}"
| |
| redirect_to edit_assignment_path aid
| |
| undo_link("Assignment \"#{@assignment_form.assignment.name}\" has been created successfully. ")
| |
| return
| |
| else
| |
| flash.now[:error] = "Failed to create assignment"
| |
| render 'new'
| |
| end
| |
| else
| |
| render 'new'
| |
| undo_link("Assignment \"#{@assignment_form.assignment.name}\" has been created successfully. ")
| |
| end
| |
| end
| |
| </pre>
| |
| | |
| '''After'''
| |
| <pre>
| |
| def create
| |
| @assignment_form = AssignmentForm.new(assignment_form_params)
| |
| if params[:button]
| |
| # E2138 issue #3
| |
| find_existing_assignment = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id)
| |
| dir_path = assignment_form_params[:assignment][:directory_path]
| |
| find_existing_directory = Assignment.find_by(directory_path: dir_path, course_id: @assignment_form.assignment.course_id)
| |
| if !find_existing_assignment and !find_existing_directory and @assignment_form.save #No existing names/directories
| |
| @assignment_form.create_assignment_node
| |
| current_assignment = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id)
| |
| assignment_form_params[:assignment][:id] = current_assignment.id.to_s
| |
| ques_array = assignment_form_params[:assignment_questionnaire]
| |
| due_array = assignment_form_params[:due_date]
| |
| ques_array.each do |cur_questionnaire|
| |
| cur_questionnaire[:assignment_id] = current_assignment.id.to_s
| |
| end
| |
| due_array.each do |cur_due|
| |
| cur_due[:parent_id] = current_assignment.id.to_s
| |
| end
| |
| assignment_form_params[:assignment_questionnaire] = ques_array
| |
| assignment_form_params[:due_date] = due_array
| |
| @assignment_form.update(assignment_form_params, current_user)
| |
| aid = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id).id
| |
| ExpertizaLogger.info "Assignment created: #{@assignment_form.as_json}"
| |
| redirect_to edit_assignment_path aid
| |
| undo_link("Assignment \"#{@assignment_form.assignment.name}\" has been created successfully. ")
| |
| return
| |
| else
| |
| flash[:error] = "Failed to create assignment."
| |
| if find_existing_assignment
| |
| flash[:error] << "<br> " + @assignment_form.assignment.name + " already exists as an assignment name"
| |
| end
| |
| if find_existing_directory
| |
| flash[:error] << "<br> " + dir_path + " already exists as a submission directory name"
| |
| end
| |
| redirect_to "/assignments/new?private=1"
| |
| end
| |
| else
| |
| render 'new'
| |
| undo_link("Assignment \"#{@assignment_form.assignment.name}\" has been created successfully. ")
| |
| end
| |
| end
| |
| </pre>
| |
|
| |
|
| = Test Plan = | | = Test Plan = |