class SakaiInfo::Site

Attributes

dbrow[R]
title[R]
type[R]

Public Class Methods

all_serializations() click to toggle source
# File lib/sakai-info/site.rb, line 448
def self.all_serializations
  [
   :default,
   :users,
   :pages,
   :groups,
   :quizzes,
   :disk,
   :assignments,
   :announcements,
   :gradebook,
   :realm,
   :forums,
   :calendar_events,
   :mod,
  ]
end
clear_cache() click to toggle source
# File lib/sakai-info/site.rb, line 22
def self.clear_cache
  @@cache = {}
end
count() click to toggle source

finders/counters

# File lib/sakai-info/site.rb, line 220
def self.count
  DB.connect[:sakai_site].count
end
count_by_property(name, value) click to toggle source
# File lib/sakai-info/site.rb, line 228
def self.count_by_property(name, value)
  DB.connect[:sakai_site_property].
    where(:name => name, Sequel.function(:to_char, :value) => value).count
end
count_by_type(type) click to toggle source
# File lib/sakai-info/site.rb, line 282
def self.count_by_type(type)
  Site.query_by_type(type).count
end
count_by_user_id(user_id) click to toggle source
# File lib/sakai-info/site.rb, line 224
def self.count_by_user_id(user_id)
  DB.connect[:sakai_site_user].where(:user_id => user_id).count
end
find(id) click to toggle source
# File lib/sakai-info/site.rb, line 27
def self.find(id)
  if @@cache[id].nil?
    row = DB.connect[:sakai_site].where(:site_id => id).first
    if row.nil?
      raise ObjectNotFoundException.new(Site, id)
    end

    @@cache[id] = Site.new(row)
  end
  @@cache[id]
end
find!(id) click to toggle source
# File lib/sakai-info/site.rb, line 39
def self.find!(id)
  begin
    site = Site.find(id)
  rescue ObjectNotFoundException => e
    if e.classname == Site.name
      site = MissingSite.find(id)
    end
  end
  site
end
find_all() click to toggle source
# File lib/sakai-info/site.rb, line 241
def self.find_all
  DB.connect[:sakai_site].select(:site_id).all.collect{|row| @@cache[row[:site_id]] = Site.new(row)}
end
find_all_ids() click to toggle source
# File lib/sakai-info/site.rb, line 245
def self.find_all_ids
  DB.connect[:sakai_site].select(:site_id).all.collect{|r| r[:site_id]}
end
find_all_non_workspace_ids() click to toggle source
# File lib/sakai-info/site.rb, line 254
def self.find_all_non_workspace_ids
  DB.connect[:sakai_site].select(:site_id).
    where(~Sequel.like(:site_id, "~%")).all.collect{|r| r[:site_id]}
end
find_all_workspace_ids() click to toggle source
# File lib/sakai-info/site.rb, line 249
def self.find_all_workspace_ids
  DB.connect[:sakai_site].select(:site_id).
    where(Sequel.like(:site_id, "~%")).all.collect{|r| r[:site_id]}
end
find_by_title(title) click to toggle source
# File lib/sakai-info/site.rb, line 269
def self.find_by_title(title)
  Site.query_by_title(title).all.collect{|row| @@cache[row[:site_id]] = Site.new(row)}
end
find_by_type(type) click to toggle source
# File lib/sakai-info/site.rb, line 286
def self.find_by_type(type)
  Site.query_by_type(type).all.collect{|row| @@cache[row[:site_id]] = Site.new(row)}
end
find_ids_by_property(property_name, property_value) click to toggle source
# File lib/sakai-info/site.rb, line 233
def self.find_ids_by_property(property_name, property_value)
  SiteProperty.find_site_ids_by_property(property_name, property_value)
end
find_ids_by_semester(term_eid) click to toggle source
# File lib/sakai-info/site.rb, line 237
def self.find_ids_by_semester(term_eid)
  Site.find_ids_by_property("term_eid", term_eid)
end
find_ids_by_title(title) click to toggle source
# File lib/sakai-info/site.rb, line 273
def self.find_ids_by_title(title)
  Site.query_by_title(title).select(:site_id).all.collect{|row|row[:site_id]}
end
find_ids_by_type(type) click to toggle source
# File lib/sakai-info/site.rb, line 259
def self.find_ids_by_type(type)
  DB.connect[:sakai_site].select(:site_id).
    where(:type => type).all.collect{|r| r[:site_id]}
end
new(dbrow) click to toggle source
# File lib/sakai-info/site.rb, line 50
def initialize(dbrow)
  @dbrow = dbrow

  @id = dbrow[:site_id]
  @title = dbrow[:title]
  @type = dbrow[:type]
  @is_joinable = (dbrow[:joinable].to_i == 1)
  @is_published = (dbrow[:published].to_i == 1)
  @join_role_string = dbrow[:join_role].to_s
end
query_by_title(title) click to toggle source

by_title: uses like

# File lib/sakai-info/site.rb, line 265
def self.query_by_title(title)
  DB.connect[:sakai_site].where("upper(title) like ?", "%#{title.upcase}%")
end
query_by_type(type) click to toggle source

by_type queries

# File lib/sakai-info/site.rb, line 278
def self.query_by_type(type)
  DB.connect[:sakai_site].where(:type => type)
end

Public Instance Methods

announcement_channel() click to toggle source

announcement properties

# File lib/sakai-info/site.rb, line 122
def announcement_channel
  if @announcement_channel.nil?
    begin
      @announcement_channel = AnnouncementChannel.find_by_site_id(self.id)
    rescue ObjectNotFoundException
      @announcement_channel = -1
      return nil
    end
  elsif @announcement_channel == -1
    return nil
  end
  @announcement_channel
end
announcement_count() click to toggle source
# File lib/sakai-info/site.rb, line 141
def announcement_count
  return 0 if self.announcement_channel.nil?
  @announcement_count ||= self.announcement_channel.announcement_count
end
announcements() click to toggle source
# File lib/sakai-info/site.rb, line 136
def announcements
  return nil if self.announcement_channel.nil?
  @announcements ||= self.announcement_channel.announcements
end
announcements_serialization() click to toggle source
# File lib/sakai-info/site.rb, line 406
def announcements_serialization
  if self.announcement_count > 0
    {
      "announcements" => self.announcements.collect { |annc| annc.serialize(:summary) }
    }
  else
    {}
  end
end
assignment_count() click to toggle source
# File lib/sakai-info/site.rb, line 99
def assignment_count
  @assignment_count ||= Assignment.count_by_site_id(@id)
end
assignments() click to toggle source
# File lib/sakai-info/site.rb, line 85
def assignments
  @assignments ||= Assignment.find_by_site_id(@id)
end
assignments_serialization() click to toggle source
# File lib/sakai-info/site.rb, line 396
def assignments_serialization
  if self.assignment_count > 0
    {
      "assignments" => self.assignments.collect { |asn| asn.serialize(:summary) }
    }
  else
    {}
  end
end
attachment_storage() click to toggle source
# File lib/sakai-info/site.rb, line 195
def attachment_storage
  attachment_collection_id = "/attachment/#{@id}/"
  @attachment_storage ||= ContentCollection.find!(attachment_collection_id)
end
calendar() click to toggle source

calendar

# File lib/sakai-info/site.rb, line 178
def calendar
  @calendar ||= Calendar.find!(@id)
end
calendar_event_count() click to toggle source
# File lib/sakai-info/site.rb, line 182
def calendar_event_count
  @calendar_event_count ||= self.calendar.event_count
end
calendar_events_serialization() click to toggle source
# File lib/sakai-info/site.rb, line 442
def calendar_events_serialization
  {
    "calendar_events" => self.calendar.events.collect { |e| e.serialize(:summary) }
  }
end
default_serialization() click to toggle source

serialization methods

# File lib/sakai-info/site.rb, line 292
def default_serialization
  result = {
    "id" => self.id,
    "title" => self.title,
    "type" => self.type,
    "is_published" => self.published?,
    "site_properties" => self.properties,
    "providers" => self.realm.providers,
    "is_joinable" => self.joinable?,
    "join_role" => (self.joinable? ? self.join_role.name : nil),
    "user_count" => self.user_count,
    "group_count" => self.group_count,
    "page_count" => self.page_count,
    "pending_quiz_count" => self.pending_quiz_count,
    "published_quiz_count" => self.published_quiz_count,
    "assignment_count" => self.assignment_count,
    "announcement_count" => self.announcement_count,
    "gradebook_item_count" => (self.gradebook.nil? ? 0 : self.gradebook.item_count),
    "forum_count" => self.forum_count,
    "calendar_event_count" => self.calendar_event_count,
  }
  if result["providers"].nil? or result["providers"] == "" or result["providers"] == []
    result.delete("providers")
  end
  if result["is_joinable"] == false
    result.delete("join_role")
  end
  if result["site_properties"] == {}
    result.delete("site_properties")
  end
  if self.gradebook.nil?
    result.delete("gradebook_item_count")
  end
  result
end
disk_serialization() click to toggle source
# File lib/sakai-info/site.rb, line 386
def disk_serialization
  result = disk_unformatted_serialization["disk_usage"]
  result.keys.each do |key|
    result[key] = Util.format_filesize(result[key])
  end
  {
    "disk_usage" => result
  }
end
disk_unformatted_serialization() click to toggle source
# File lib/sakai-info/site.rb, line 371
def disk_unformatted_serialization
  {
    "disk_usage" => {
      "resources" => self.resource_storage.size_on_disk,
      "attachments" => self.attachment_storage.size_on_disk,
      "melete" => self.melete_storage.size_on_disk,
      "dropbox" => self.dropbox_storage.size_on_disk,
      "total" => (self.resource_storage.size_on_disk +
                  self.attachment_storage.size_on_disk +
                  self.melete_storage.size_on_disk +
                  self.dropbox_storage.size_on_disk)
    }
  }
end
disk_usage_csv() click to toggle source

generate a CSV line for disk usage reporting

# File lib/sakai-info/site.rb, line 215
def disk_usage_csv
  "#{@id},#{@type},#{resource_storage.size_on_disk},#{attachment_storage.size_on_disk},#{melete_storage.size_on_disk},#{dropbox_storage.size_on_disk},#{total_disk_usage}"
end
dropbox_storage() click to toggle source
# File lib/sakai-info/site.rb, line 205
def dropbox_storage
  dropbox_collection_id = "/group-user/#{@id}/"
  @dropbox_storage ||= ContentCollection.find!(dropbox_collection_id)
end
forum_count() click to toggle source

forum properties

# File lib/sakai-info/site.rb, line 169
def forum_count
  @forum_count ||= Forum.count_by_site_id(@id)
end
forums() click to toggle source
# File lib/sakai-info/site.rb, line 173
def forums
  @forums ||= Forum.find_by_site_id(@id)
end
forums_serialization() click to toggle source
# File lib/sakai-info/site.rb, line 432
def forums_serialization
  if self.forum_count > 0
    {
      "forums" => self.forums.collect { |fr| fr.serialize(:summary) }
    }
  else
    {}
  end
end
gradebook() click to toggle source

gradebook properties

# File lib/sakai-info/site.rb, line 164
def gradebook
  @gradebook ||= Gradebook.find_by_site_id(@id).first
end
gradebook_serialization() click to toggle source
# File lib/sakai-info/site.rb, line 416
def gradebook_serialization
  if self.gradebook
    {
      "gradebook" => self.gradebook.serialize(:site_summary, :items)
    }
  else
    {}
  end
end
group_count() click to toggle source

group properties

# File lib/sakai-info/site.rb, line 113
def group_count
  @group_count ||= Group.count_by_site_id(@id)
end
groups() click to toggle source
# File lib/sakai-info/site.rb, line 117
def groups
  @groups ||= Group.find_by_site_id(@id)
end
groups_serialization() click to toggle source
# File lib/sakai-info/site.rb, line 349
def groups_serialization
  {
    "groups" => self.groups.collect { |grp| grp.serialize(:summary) }
  }
end
join_role() click to toggle source
# File lib/sakai-info/site.rb, line 69
def join_role
  @join_role_string
end
joinable?() click to toggle source
# File lib/sakai-info/site.rb, line 61
def joinable?
  @is_joinable
end
melete_storage() click to toggle source
# File lib/sakai-info/site.rb, line 200
def melete_storage
  melete_collection_id = "/private/meleteDocs/#{@id}/"
  @melete_storage ||= ContentCollection.find!(melete_collection_id)
end
membership() click to toggle source
# File lib/sakai-info/site.rb, line 77
def membership
  @membership ||= SiteMembership.find_by_site_id(@id)
end
page_count() click to toggle source
# File lib/sakai-info/site.rb, line 94
def page_count
  @page_count ||=
    DB.connect[:sakai_site_page].filter(:site_id => @id).count
end
pages() click to toggle source
# File lib/sakai-info/site.rb, line 81
def pages
  @pages ||= Page.find_by_site_id(@id)
end
pages_serialization() click to toggle source
# File lib/sakai-info/site.rb, line 343
def pages_serialization
  {
    "pages" => self.pages.collect { |pg| pg.serialize(:site_summary) }
  }
end
pending_quiz_count() click to toggle source
# File lib/sakai-info/site.rb, line 151
def pending_quiz_count
  @pending_quiz_count ||= PendingQuiz.count_by_site_id(@id)
end
pending_quizzes() click to toggle source
# File lib/sakai-info/site.rb, line 159
def pending_quizzes
  @pending_quizzes ||= PendingQuiz.find_by_site_id(@id)
end
properties() click to toggle source
# File lib/sakai-info/site.rb, line 73
def properties
  @properties ||= SiteProperty.find_by_site_id(@id)
end
published?() click to toggle source
# File lib/sakai-info/site.rb, line 65
def published?
  @is_published
end
published_quiz_count() click to toggle source

samigo quiz properties

# File lib/sakai-info/site.rb, line 147
def published_quiz_count
  @published_quiz_count ||= PublishedQuiz.count_by_site_id(@id)
end
published_quizzes() click to toggle source
# File lib/sakai-info/site.rb, line 155
def published_quizzes
  @published_quizzes ||= PublishedQuiz.find_by_site_id(@id)
end
quizzes_serialization() click to toggle source
# File lib/sakai-info/site.rb, line 355
def quizzes_serialization
  result = {}
  if self.pending_quiz_count > 0 or self.published_quiz_count > 0
    result["quizzes"] = {}
  end
  if self.pending_quiz_count > 0
    result["quizzes"]["pending"] =
      self.pending_quizzes.collect { |pq| pq.serialize(:site_summary) }
  end
  if self.published_quiz_count > 0
    result["quizzes"]["published"] =
      self.published_quizzes.collect { |pq| pq.serialize(:site_summary) }
  end
  result
end
realm() click to toggle source

authz/realm properties

# File lib/sakai-info/site.rb, line 104
def realm
  @authz_realm ||= AuthzRealm.find_by_site_id(@id)
end
realm_serialization() click to toggle source
# File lib/sakai-info/site.rb, line 426
def realm_serialization
  {
    "realm_roles" => self.realm.realm_roles.collect { |rr| rr.serialize(:summary) }
  }
end
resource_storage() click to toggle source

content properties

# File lib/sakai-info/site.rb, line 187
def resource_storage
  resource_collection_id = "/group/#{@id}/"
  if @type == "myworkspace" or @type == "guestworkspace"
    resource_collection_id = "/user/#{@id.sub(/^~/,'')}"
  end
  @resource_storage ||= ContentCollection.find!(resource_collection_id)
end
summary_serialization() click to toggle source
# File lib/sakai-info/site.rb, line 328
def summary_serialization
  {
    "id" => self.id,
    "title" => self.title,
    "type" => self.type,
    "created_by" => self.created_by.eid
  }
end
total_disk_usage() click to toggle source
# File lib/sakai-info/site.rb, line 210
def total_disk_usage
  resource_storage.size_on_disk + attachment_storage.size_on_disk + melete_storage.size_on_disk + dropbox_storage.size_on_disk
end
user_count() click to toggle source
# File lib/sakai-info/site.rb, line 89
def user_count
  @user_count ||=
    DB.connect[:sakai_site_user].filter(:site_id => @id).count
end
users_serialization() click to toggle source
# File lib/sakai-info/site.rb, line 337
def users_serialization
  {
    "users" => self.membership.collect { |sm| sm.serialize(:site_summary) }
  }
end