class SakaiInfo::User
Attributes
dbrow[R]
eid[R]
email[R]
name[R]
type[R]
Public Class Methods
all_serializations()
click to toggle source
# File lib/sakai-info/user.rb, line 243 def self.all_serializations [ :default, :sites, :pools, :mod, ] end
clear_cache()
click to toggle source
# File lib/sakai-info/user.rb, line 22 def self.clear_cache @@cache = {} @@id_cache = {} end
count()
click to toggle source
finders/counters
# File lib/sakai-info/user.rb, line 155 def self.count DB.connect[:sakai_user].count end
count_by_realm_id_and_role_id(realm_id, role_id)
click to toggle source
# File lib/sakai-info/user.rb, line 159 def self.count_by_realm_id_and_role_id(realm_id, role_id) DB.connect[:sakai_realm_rl_gr]. filter(:realm_key => realm_id, :role_key => role_id).count end
find(id)
click to toggle source
# File lib/sakai-info/user.rb, line 28 def self.find(id) if @@cache[id].nil? eid = User.get_eid(id) user_id = User.get_user_id(id) if eid.nil? or user_id.nil? raise ObjectNotFoundException.new(User, id) end row = DB.connect[:sakai_user].where(:user_id => user_id).first if row.nil? # Has sakai_user_id_map record, but not sakai_user record. Provided account! # TODO: replace with a ProvidedUser subclass @@cache[eid] = @@cache[user_id] = User.new(user_id,'Provided') else @@cache[eid] = @@cache[user_id] = User.new(row) end end @@cache[id] end
find!(id)
click to toggle source
# File lib/sakai-info/user.rb, line 48 def self.find!(id) begin user = User.find(id) rescue ObjectNotFoundException => e if e.classname == User.name user = MissingUser.find(id) end end end
find_by_name(name)
click to toggle source
# File lib/sakai-info/user.rb, line 192 def self.find_by_name(name) User.query_by_name(name).all.collect{|row| @@cache[row[:user_id]] = User.new(row)} end
find_by_realm_id_and_role_id(realm_id, role_id)
click to toggle source
# File lib/sakai-info/user.rb, line 164 def self.find_by_realm_id_and_role_id(realm_id, role_id) # TODO: implement this correctly # (code below isn't going to work) # users = [] # DB.connect.fetch("select first_name, last_name, type, " + # "to_char(createdon,'YYYY-MM-DD HH24:MI:SS') as created_at, " + # "to_char(modifiedon,'YYYY-MM-DD HH24:MI:SS') as modified_at " + # "from sakai_user where user_id in " + # "(select user_id from sakai_realm_rl_gr " + # "where realm_key = ? " + # "and role_key = ?)", realm_id, role_id) do |row| # first_name, last_name, type, created_at, modified_at = *row # first_name ||= "" # last_name ||= "" # @@cache[eid] = # @@cache[user_id] = # User.new(user_id, eid, (first_name+' '+last_name), type, created_at, modified_at) # users << @@cache[eid] # end # users nil end
find_ids_by_name(name)
click to toggle source
# File lib/sakai-info/user.rb, line 196 def self.find_ids_by_name(name) User.query_by_name(name).select(:user_id).all.collect{|row|row[:user_id]} end
get_eid(id)
click to toggle source
# File lib/sakai-info/user.rb, line 63 def self.get_eid(id) if ids = User.get_ids(id) ids[:eid] else nil end end
get_ids(id)
click to toggle source
# File lib/sakai-info/user.rb, line 58 def self.get_ids(id) @@id_cache[id] ||= DB.connect[:sakai_user_id_map].where(:user_id => id).or(:eid => id).first end
get_user_id(id)
click to toggle source
# File lib/sakai-info/user.rb, line 71 def self.get_user_id(id) if ids = User.get_ids(id) ids[:user_id] else nil end end
new(*args)
click to toggle source
# File lib/sakai-info/user.rb, line 79 def initialize(*args) case args.size when 1 dbrow = args[0] @dbrow = dbrow @id = dbrow[:user_id] @eid = User.get_eid(@id) @email = dbrow[:email] @name = ((dbrow[:first_name] || "") + " " + (dbrow[:last_name] || "")).strip @type = dbrow[:type] when 2 user_id, placeholder_string = args @id = user_id @eid=User.get_eid(@id) @email = @name = @type = placeholder_string else raise ArgumentError, "This method takes 1-2 arguments" end end
query_by_name(name)
click to toggle source
by_name: uses like
# File lib/sakai-info/user.rb, line 188 def self.query_by_name(name) DB.connect[:sakai_user].where("upper(first_name) like ? or upper(last_name) like ? or upper(first_name)||\' \'||upper(last_name) like ?", "%#{name.upcase}%", "%#{name.upcase}%", "%#{name.upcase}%") end
Public Instance Methods
assignment_content_count()
click to toggle source
# File lib/sakai-info/user.rb, line 127 def assignment_content_count @assignment_content_count ||= AssignmentContent.count_by_user_id(@id) end
assignment_contents()
click to toggle source
# File lib/sakai-info/user.rb, line 123 def assignment_contents @assignment_contents ||= AssignmentContent.find_by_user_id(@id) end
assignment_submission_count()
click to toggle source
# File lib/sakai-info/user.rb, line 119 def assignment_submission_count @assignment_submission_count ||= AssignmentSubmission.count_by_user_id(@id) end
assignment_submissions()
click to toggle source
# File lib/sakai-info/user.rb, line 115 def assignment_submissions @assignment_submissions ||= AssignmentSubmission.find_by_user_id(@id) end
default_serialization()
click to toggle source
yaml/json serialization
# File lib/sakai-info/user.rb, line 201 def default_serialization result = { "id" => self.id, "name" => self.name, "eid" => self.eid, "email" => self.email, "type" => self.type, "user_properties" => UserProperty.find_by_user_id(self.id), "site_count" => self.site_count, "question_pool_count" => self.question_pool_count } if result["user_properties"] == {} result.delete("user_properties") end result end
membership()
click to toggle source
# File lib/sakai-info/user.rb, line 131 def membership @membership ||= SiteMembership.find_by_user_id(@id) end
pools_serialization()
click to toggle source
# File lib/sakai-info/user.rb, line 233 def pools_serialization if self.question_pool_count > 0 { "question_pools" => self.question_pools.collect { |qp| qp.serialize(:user_summary) } } else {} end end
preferences_xml()
click to toggle source
# File lib/sakai-info/user.rb, line 143 def preferences_xml if @preferences_xml.nil? @preferences_xml = "" row = DB.connect[:sakai_preferences].filter(:preferences_id => @user_id).first if not row.nil? REXML::Document.new(row[:xml].read).write(@preferences_xml, 2) end end @preferences_xml end
properties()
click to toggle source
# File lib/sakai-info/user.rb, line 99 def properties @properties ||= UserProperty.find_by_user_id(@id) end
question_pool_count()
click to toggle source
# File lib/sakai-info/user.rb, line 111 def question_pool_count @question_pool_count ||= QuestionPool.count_by_user_id(@id) end
question_pools()
click to toggle source
# File lib/sakai-info/user.rb, line 107 def question_pools @question_pools ||= QuestionPool.find_by_user_id(@id) end
site_count()
click to toggle source
# File lib/sakai-info/user.rb, line 135 def site_count if @membership.nil? Site.count_by_user_id(@id) else @membership.length end end
sites_serialization()
click to toggle source
# File lib/sakai-info/user.rb, line 227 def sites_serialization { "sites" => self.membership.collect { |sm| sm.serialize(:user_summary) } } end
summary_serialization()
click to toggle source
# File lib/sakai-info/user.rb, line 218 def summary_serialization { "id" => self.id, "eid" => self.eid, "name" => self.name, "type" => self.type } end
workspace()
click to toggle source
# File lib/sakai-info/user.rb, line 103 def workspace @workspace ||= Site.find("~" + @id) end