CSC/ECE 517 Fall 2019 - E1938. OSS project Duke Blue: Fix import glitches

From Expertiza_Wiki
Revision as of 04:22, 29 October 2019 by Ajain37 (talk | contribs)
Jump to navigation Jump to search

About Expertiza

Expertiza is an open source project based on Ruby on Rails framework and the code is available on Github. Expertiza allows the instructor to create new assignments as well as edit new or existing assignments. Instructors can also create a list of topics the students can sign up for and specify deadlines for completion of various tasks. Students can form teams in Expertiza to work on various projects and assignments as well as peer review other students' submissions. Expertiza supports submission across various document types, including the URLs Wiki pages.

Issue #918

New code introduced is as follows.
File:app/helpers/import_topics_helper.rb
Code: def self.define_attributes(row_hash)

   attributes = {}
   if !row_hash[:description].nil? and !row_hash[:description].ascii_only?
     row_hash[:description] = self.trim_non_ascii(row_hash[:description])
     puts row_hash[:description]
   end
   attributes["topic_identifier"] = row_hash[:topic_identifier].strip
   attributes["topic_name"] = row_hash[:topic_name].strip
   attributes["max_choosers"] = row_hash[:max_choosers].strip
   attributes
 end
 def self.trim_non_ascii(string)
   string.split().each do |char|
     !char.ascii_only? ? string.tr!(char, ' ') : nil
   end
   string.gsub!(/\s+/, ' ')
 end

Issue #328

This was an issue to fix the functionality of Insert any new members into existing team. This was due to faulty handling of the option handle_dups and incorrect checking of parameters.
Code was modified to ensure minimal impact to existing testcases and functionalities. Code:

     name = handle_duplicate(team, name, id, options["handle_dups"], teamtype)



After fixing changes


Issue #329

This was a request to add an option to rename existing team if there was a conflict in the team name.
New code introduced was as follows:
In start.html.erb

         <option value="rename_existing">rename the existing team and import</option>


In team.rb

   # E1938: Added handling for renaming old team when conflict arises
   if handle_dups == "rename_existing"
     if teamtype.is_a?(CourseTeam.class)
       team.update(name: self.generate_team_name(Course.find(id).name))
     elsif  teamtype.is_a?(AssignmentTeam.class)
       team.update(name: self.generate_team_name(Assignment.find(id).name))
     end
     return name
   end


The state of D before conflicting import:



After fixing changes


As you can see the new team got the name D and the old file got renamed to Team_17.

Issue #153
This was a new requirement to add an option to upload topics along with the teams assigned.

Expectations from the import file:
Assigned team name should exist in the system, otherwise the import will fail. Instructor has to make sure that the teams which are assigned in the import file should exist with same names in the system or database.

Instructor also need to ensure that the topic for which the team is being assigned should not be full or can accommodate new team assignment to the respective topic.

Code Changes:
import_file/_sign_up_topic.html.erb (All the select tags has been changed)

           <select name="select1" id="select1" class="form-control" style="background-color:lightgrey">
             <option value="topic_identifier">Topic Identifier (required)</option>
             <option value="topic_name">Topic Name (required)</option>
             <option value="max_choosers">Max Choosers (required)</option>
             <option value="category">Category (optional)</option>
             <option value="description">Description (optional)</option>
             <option value="link">Link (optional)</option>
             <option value="assigned_team">Assigned Team (optional)</option>
           </select>


model/sign_up_topic.rb def self.import(row_hash, session, _id = nil) if row_hash.length < 3 raise ArgumentError, "The CSV File expects the format: Topic identifier, Topic name, Max choosers, Topic Category (optional), Topic Description (Optional), Topic Link (optional), Assigned Team Name (optional)." end topic = SignUpTopic.where(topic_name: row_hash[:topic_name], assignment_id: session[:assignment_id]).first if topic.nil? attributes = ImportTopicsHelper.define_attributes(row_hash) topic_new_id = ImportTopicsHelper.create_new_sign_up_topic(attributes, session) unless row_hash[:assigned_team].nil? team = Team.where(name: row_hash[:assigned_team]).first ImportTopicsHelper.assign_team_topic(topic_new_id, team.id) end else topic.max_choosers = row_hash[:max_choosers] topic.topic_identifier = row_hash[:topic_identifier] topic.save unless row_hash[:assigned_team].nil? team = Team.where(name: row_hash[:assigned_team]).first newteam = SignedUpTeam.where(topic_id: topic.id, team_id: team.id).first if newteam.nil? ImportTopicsHelper.assign_team_topic(topic.id, team.id) else newteam.team_id = team.id newteam.save end end end end
helpers/import_topics_helper.rb def self.assign_team_topic(topic_id, assigned_team) attributes = {} attributes["topic_id"] = topic_id attributes["team_id"] = assigned_team assign_team = SignedUpTeam.new(attributes) assign_team.save! end def self.create_new_sign_up_topic(attributes, session) sign_up_topic = SignUpTopic.new(attributes) sign_up_topic.assignment_id = session[:assignment_id] sign_up_topic.save # sign_up_topic sign_up_topic.save! sign_up_topic.id end controllers/import_file_controller.rb (Optional Count) if (params[:assigned_team] == 'true') @optional_count += 1 end controllers/import_file_controller.rb (import_from_hash) elsif params[:optional_count] == '4' new_header = [params[:select1], params[:select2], params[:select3], params[:select4], params[:select5], params[:select6], params[:select7]] @header_integrated_body = hash_rows_with_headers(new_header,contents_hash[:body]) views/sign_up_sheet/_add_topics.html.erb <%= link_to 'Import topics', { :controller => 'import_file', :action => 'start', :model => 'SignUpTopic', :id => params[:id], :expected_fields => 'Topic Identifier' + '&nbsp&nbsp|&nbsp&nbsp' + 'Topic Name' + '&nbsp&nbsp|&nbsp&nbsp' + 'Max Choosers' + '&nbsp&nbsp|&nbsp&nbsp' + 'Topic Category (optional)' + '&nbsp&nbsp|&nbsp&nbsp' + 'Topic Description (optional)' + '&nbsp&nbsp|&nbsp&nbsp' + 'Topic Link (optional)' + '&nbsp&nbsp|&nbsp&nbsp' + 'Assigned Team (optional)' An option column checkbox (Teams Assigned) has been added to the UI



A new column Assigned Team is added where the columns are being mapped.



References

1. Expertiza on GITHUB: https://github.com/expertiza/expertiza

2. GitHub Project Repository Fork: https://github.com/NisargC/expertiza

3. Demo link: http://152.46.19.138:8080/

4. Expertiza project documentation wiki: http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2019_-_E1938._OSS_project_Duke_Blue:_Fix_import_glitches