Add StudyGroups with ExternalUsers only
This commit is contained in:
@@ -52,6 +52,11 @@ module Lti
|
||||
end
|
||||
private :external_user_name
|
||||
|
||||
def mooc_course
|
||||
# All Xikolo platforms set the custom_course to the course code
|
||||
params[:custom_course]
|
||||
end
|
||||
|
||||
def refuse_lti_launch(options = {})
|
||||
return_to_consumer(lti_errorlog: options[:message], lti_errormsg: t('sessions.oauth.failure'))
|
||||
end
|
||||
@@ -133,6 +138,13 @@ module Lti
|
||||
end
|
||||
private :set_current_user
|
||||
|
||||
def set_study_group_membership
|
||||
return if mooc_course
|
||||
group = StudyGroup.find_or_create_by(external_id: @provider.resource_link_id, consumer: @consumer)
|
||||
group.users |= [@current_user] # add current user if not already member of the group
|
||||
group.save
|
||||
end
|
||||
|
||||
def store_lti_session_data(options = {})
|
||||
lti_parameters = LtiParameter.find_or_create_by(consumers_id: options[:consumer].id,
|
||||
external_users_id: @current_user.id,
|
||||
|
@@ -1,7 +1,7 @@
|
||||
class SessionsController < ApplicationController
|
||||
include Lti
|
||||
|
||||
[:require_oauth_parameters, :require_valid_consumer_key, :require_valid_oauth_signature, :require_unique_oauth_nonce, :set_current_user, :require_valid_exercise_token].each do |method_name|
|
||||
[:require_oauth_parameters, :require_valid_consumer_key, :require_valid_oauth_signature, :require_unique_oauth_nonce, :set_current_user, :set_study_group_membership, :require_valid_exercise_token].each do |method_name|
|
||||
before_action(method_name, only: :create_through_lti)
|
||||
end
|
||||
|
||||
|
@@ -4,11 +4,11 @@ class ExternalUser < User
|
||||
validates :external_id, presence: true
|
||||
|
||||
def displayname
|
||||
result = name
|
||||
if(result == nil || result == "")
|
||||
result = "User " + id.to_s
|
||||
if name.blank?
|
||||
"User " + id.to_s
|
||||
else
|
||||
name
|
||||
end
|
||||
result
|
||||
end
|
||||
|
||||
end
|
||||
|
11
app/models/study_group.rb
Normal file
11
app/models/study_group.rb
Normal file
@@ -0,0 +1,11 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class StudyGroup < ApplicationRecord
|
||||
has_many :study_group_memberships
|
||||
# Use `ExternalUser` as `source_type` for now.
|
||||
# Using `User` will lead ActiveRecord to access the inexistent table `users`.
|
||||
# Issue created: https://github.com/rails/rails/issues/34531
|
||||
has_many :users, through: :study_group_memberships, source_type: 'ExternalUser'
|
||||
has_many :submissions
|
||||
belongs_to :consumer
|
||||
end
|
8
app/models/study_group_membership.rb
Normal file
8
app/models/study_group_membership.rb
Normal file
@@ -0,0 +1,8 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class StudyGroupMembership < ApplicationRecord
|
||||
belongs_to :user, polymorphic: true
|
||||
belongs_to :study_group
|
||||
|
||||
validates_uniqueness_of :user_id, :scope => [:user_type, :study_group_id]
|
||||
end
|
@@ -6,6 +6,7 @@ class Submission < ApplicationRecord
|
||||
FILENAME_URL_PLACEHOLDER = '{filename}'
|
||||
|
||||
belongs_to :exercise
|
||||
belongs_to :study_group, optional: true
|
||||
|
||||
has_many :testruns
|
||||
has_many :structured_errors
|
||||
|
@@ -4,6 +4,8 @@ class User < ApplicationRecord
|
||||
ROLES = %w(admin teacher)
|
||||
|
||||
belongs_to :consumer
|
||||
has_many :study_group_memberships, as: :user
|
||||
has_many :study_groups, through: :study_group_memberships, as: :user
|
||||
has_many :exercises, as: :user
|
||||
has_many :file_types, as: :user
|
||||
has_many :submissions, as: :user
|
||||
|
Reference in New Issue
Block a user