class SakaiInfo::Quiz

Constants

ACTIVE
DELETED
INACTIVE

possible statuses

RETRACTED_FOR_EDITING

Attributes

dbrow[R]
site[R]
title[R]

Public Class Methods

all_serializations() click to toggle source
# File lib/sakai-info/quiz.rb, line 222
def self.all_serializations
  [
   :default,
   :sections,
   :items,
  ]
end
clear_cache() click to toggle source
# File lib/sakai-info/quiz.rb, line 22
def self.clear_cache
  @@cache = {}
end
count_by_site_id(site_id) click to toggle source
# File lib/sakai-info/quiz.rb, line 89
def self.count_by_site_id(site_id)
  {
    "pending_count" => PendingQuiz.count_by_site_id(site_id),
    "published_count" => PublishedQuiz.count_by_site_id(site_id)
  }
end
find(id) click to toggle source
# File lib/sakai-info/quiz.rb, line 64
def self.find(id)
  id = id.to_s
  if @@cache[id].nil?
    quiz = nil
    begin
      quiz = PendingQuiz.find(id)
    rescue ObjectNotFoundException
      begin
        quiz = PublishedQuiz.find(id)
      rescue ObjectNotFoundException
        raise ObjectNotFoundException.new(Quiz, id)
      end
    end
    @@cache[id] = quiz
  end
  @@cache[id]
end
find_by_site_id(site_id) click to toggle source
# File lib/sakai-info/quiz.rb, line 82
def self.find_by_site_id(site_id)
  {
    "pending" => PendingQuiz.find_by_site_id(site_id),
    "published" => PublishedQuiz.find_by_site_id(site_id)
  }
end
new(dbrow, site = nil) click to toggle source

a note about quizzes: they do not link directly back to sites instead, they link back only via the sam_authzdata_t table

# File lib/sakai-info/quiz.rb, line 30
def initialize(dbrow, site = nil)
  @site = nil
  if site.is_a? String
    begin
      @site = Site.find(site)
    rescue ObjectNotFoundException
      @site = nil
    end
  elsif site.is_a? Site
    @site = site
  end

  @id = dbrow[:id]
  @title = dbrow[:title]
  @dbrow = dbrow

  if @site.nil?
    # published quizzes map to site_id via the OWN_PUBLISHED_ASSESSMENT function
    # pending quizzes map to site_id via the EDIT_ASSESSMENT function
    DB.connect[:sam_authzdata_t].select(Sequel.function(:distinct, :agentid)).
      where(:qualifierid => @id).
      where(:functionid => ["OWN_PUBLISHED_ASSESSMENT","EDIT_ASSESSMENT"]).
      all.each do |row|
      begin
        site = Site.find(row[:agentid])
        @site = site
      rescue ObjectNotFoundException
        @site = nil
      end
      break if not @site.nil?
    end
  end
end

Public Instance Methods

access_control() click to toggle source
# File lib/sakai-info/quiz.rb, line 131
def access_control
  @access_control ||= self.access_control_class.find(self.id)
end
access_control_summary_serialization() click to toggle source
# File lib/sakai-info/quiz.rb, line 188
def access_control_summary_serialization
  result = self.summary_serialization
  result.delete("id")
  result
end
authorizations() click to toggle source
# File lib/sakai-info/quiz.rb, line 139
def authorizations
  @authorizations ||= self.authorization_class.find_by_quiz_id(self.id)
end
authorizations_serialization() click to toggle source
# File lib/sakai-info/quiz.rb, line 212
def authorizations_serialization
  {
    "authorizations" => self.authorizations.collect { |a| a.serialize(:quiz_summary) }
  }
end
auths_serialization() click to toggle source
# File lib/sakai-info/quiz.rb, line 218
def auths_serialization
  self.authorizations_serialization
end
default_serialization() click to toggle source
# File lib/sakai-info/quiz.rb, line 143
def default_serialization
  result = {
    "id" => self.id,
    "title" => self.title,
    "site" => nil,
    "status" => self.status,
    "type" => self.quiz_type,
    "section_count" => self.section_count,
    "item_count" => self.item_count,
    "attempt_count" => nil,
    "access_control" => self.access_control.serialize(:quiz_summary)
  }
  if not self.site.nil?
    result["site"] = self.site.serialize(:summary)
  end
  if self.respond_to? :attempt_count
    result["attempt_count"] = self.attempt_count
  else
    result.delete("attempt_count")
  end
  result
end
item_count() click to toggle source
# File lib/sakai-info/quiz.rb, line 123
def item_count
  @item_count ||= self.item_class.count_by_quiz_id(self.id)
end
items() click to toggle source
# File lib/sakai-info/quiz.rb, line 127
def items
  @items ||= self.item_class.find_by_quiz_id(self.id)
end
items_serialization() click to toggle source
# File lib/sakai-info/quiz.rb, line 200
def items_serialization
  {
    "items" => self.items.collect { |i| i.serialize(:quiz_summary) }
  }
end
metadata() click to toggle source
# File lib/sakai-info/quiz.rb, line 135
def metadata
  @metadata ||= self.metadata_class.find_by_quiz_id(self.id)
end
metadata_serialization() click to toggle source
# File lib/sakai-info/quiz.rb, line 206
def metadata_serialization
  {
    "metadata" => self.metadata.collect { |m| [m.key, m.value] }.to_h
  }
end
quiz_type() click to toggle source
# File lib/sakai-info/quiz.rb, line 96
def quiz_type
  nil
end
section_count() click to toggle source
# File lib/sakai-info/quiz.rb, line 115
def section_count
  @section_count ||= self.section_class.count_by_quiz_id(@id)
end
sections() click to toggle source
# File lib/sakai-info/quiz.rb, line 119
def sections
  @sections ||= self.section_class.find_by_quiz_id(@id)
end
sections_serialization() click to toggle source
# File lib/sakai-info/quiz.rb, line 194
def sections_serialization
  {
    "sections" => self.sections.collect{|s|s.serialize(:quiz_summary)}
  }
end
site_summary_serialization() click to toggle source
# File lib/sakai-info/quiz.rb, line 180
def site_summary_serialization
  {
    "id" => self.id,
    "title" => self.title,
    "status" => self.status,
  }
end
status() click to toggle source
# File lib/sakai-info/quiz.rb, line 105
def status
  case @dbrow[:status].to_i
  when INACTIVE then "inactive"
  when ACTIVE then "active"
  when DELETED then "deleted"
  when RETRACTED_FOR_EDITING then "retracted for editing"
  else "unknown status '#{@dbrow[:status].to_i}'"
  end
end
summary_serialization() click to toggle source
# File lib/sakai-info/quiz.rb, line 166
def summary_serialization
  result = {
    "id" => self.id,
    "title" => self.title,
    "site_id" => nil,
    "status" => self.status,
    "type" => self.quiz_type
  }
  if not self.site.nil?
    result["site_id"] = self.site.id
  end
  result
end