diff --git a/.gitignore b/.gitignore index 3ef1f7a03..977065f4e 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,7 @@ student-work/ .byebug_history coverage/ _history + +# Institution specific config +config/*_setting.rb +!config/no_institution_setting.rb diff --git a/app/api/lti_api.rb b/app/api/lti_api.rb index 0abdfa116..7e9bbd4e2 100644 --- a/app/api/lti_api.rb +++ b/app/api/lti_api.rb @@ -71,17 +71,22 @@ class LtiApi < Grape::API error!({ error: "Missing required fields: #{missing.join(', ')}" }, 400) end - if current_user.role_id != Role.student_id - return status 204 - end + # if current_user.role_id != Role.student_id + # return status 204 + # end - role = unit.role_for(current_user) - if !role.nil? && role != Role.student - # error!({ error: 'Failed to enrol, user is already staff.' }, 400) - return status 204 + # role = unit.role_for(current_user) + # if !role.nil? && role != Role.student + # # error!({ error: 'Failed to enrol, user is already staff.' }, 400) + # return status 204 + # end + + unit_role = Doubtfire::Application.config.institution_settings.should_employ_lti_member(member) + unless unit_role.nil? + unit.employ_staff(current_user, unit_role) end - unless Doubtfire::Application.config.institution_settings.should_enrol_lti_member(token['member']) + unless Doubtfire::Application.config.institution_settings.should_enrol_lti_member(member) # error!({ error: 'User can not be enrolled into this unit.' }, 404) return status 204 end diff --git a/app/sidekiq/import_students_lti_job.rb b/app/sidekiq/import_students_lti_job.rb index 17a445149..90a31003e 100644 --- a/app/sidekiq/import_students_lti_job.rb +++ b/app/sidekiq/import_students_lti_job.rb @@ -56,9 +56,23 @@ def perform(unit_id, members) end if user.valid? + unit_role = Doubtfire::Application.config.institution_settings.should_employ_lti_member(member) + unless unit_role.nil? + staff = unit.employ_staff(user, unit_role) + if staff.valid? + result[:success] << { row: member, message: "Successfully added staff (#{unit_role.role.name})" } + next + end + end + + unless Doubtfire::Application.config.institution_settings.should_enrol_lti_member(member) + result[:ignored] << { row: member, message: "Enrolment skipped by institution setting" } + next + end + project = unit.enrol_student(user, nil) if project.valid? - result[:success] << { row: member, message: "Successfully enrolled user." } + result[:success] << { row: member, message: "Successfully enrolled user" } else result[:errors] << { row: member, message: "Failed to enrol student" } end diff --git a/config/no_institution_setting.rb b/config/no_institution_setting.rb index b788323b4..67a500669 100644 --- a/config/no_institution_setting.rb +++ b/config/no_institution_setting.rb @@ -150,6 +150,15 @@ def update_user_from_lti_response(user, user_id_data, member) user end + # If this returns nil, LTI will move on to check if this member should be enrolled as a student + def should_employ_lti_member(member) + return nil if member['roles'].include?('Student') || member['roles'].include?('Learner') + return Role.convenor if member['roles'].include?("http://purl.imsglobal.org/vocab/lis/v2/person#Administrator") + return Role.tutor if member['roles'].include?("Instructor") + + nil + end + def should_enrol_lti_member(member) # Example "roles" for a Student => ["Learner"] # Example "roles" for an Instructor, who is a global Administrator => ["Instructor", "http://purl.imsglobal.org/vocab/lis/v2/person#Administrator"],