sakai-info 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,220 @@
1
+ # sakai-info/user.rb
2
+ # SakaiInfo::User library
3
+ #
4
+ # Created 2012-02-17 daveadams@gmail.com
5
+ # Last updated 2012-02-17 daveadams@gmail.com
6
+ #
7
+ # https://github.com/daveadams/sakai-info
8
+ #
9
+ # This software is public domain.
10
+ #
11
+
12
+ module SakaiInfo
13
+ class User < SakaiObject
14
+ attr_reader :eid, :name, :type
15
+ attr_reader :created_by, :created_at, :modified_by, :modified_at
16
+
17
+ @@cache = {}
18
+ def self.find(id)
19
+ if @@cache[id].nil?
20
+ user_id = eid = nil
21
+ DB.connect.exec("select user_id, eid from sakai_user_id_map " +
22
+ "where user_id=:user_id or eid=:eid", id, id) do |row|
23
+ user_id = row[0]
24
+ eid = row[1]
25
+ end
26
+ if user_id.nil? or eid.nil?
27
+ raise ObjectNotFoundException.new(User, id)
28
+ end
29
+
30
+ DB.connect.exec("select first_name, last_name, type, " +
31
+ "to_char(createdon,'YYYY-MM-DD HH24:MI:SS'), " +
32
+ "to_char(modifiedon,'YYYY-MM-DD HH24:MI:SS') " +
33
+ "from sakai_user where user_id=:userid", user_id) do |row|
34
+ first_name, last_name, type, created_at, modified_at = *row
35
+ first_name ||= ""
36
+ last_name ||= ""
37
+ @@cache[eid] =
38
+ @@cache[user_id] =
39
+ User.new(user_id, eid, (first_name+' '+last_name), type, created_at, modified_at)
40
+ end
41
+ end
42
+ @@cache[id]
43
+ end
44
+
45
+ def initialize(id, eid, name, type, created_at, modified_at)
46
+ @id = id
47
+ @eid = eid
48
+ @name = name
49
+ @type = type
50
+ @created_at = created_at
51
+ @modified_at = modified_at
52
+ @properties = nil
53
+ end
54
+
55
+ def properties
56
+ @properties ||= UserProperty.find_by_user_id(@id)
57
+ end
58
+
59
+ def workspace
60
+ @workspace ||= Site.find("~" + @id)
61
+ end
62
+
63
+ def question_pools
64
+ @question_pools ||= QuestionPool.find_by_user_id(@id)
65
+ end
66
+
67
+ def question_pool_count
68
+ if @question_pools.nil?
69
+ QuestionPool.count_by_user_id(@id)
70
+ else
71
+ @question_pools.length
72
+ end
73
+ end
74
+
75
+ def assignment_submissions
76
+ @assignment_submissions ||= AssignmentSubmission.find_by_user_id(@id)
77
+ end
78
+
79
+ def assignment_submission_count
80
+ @assignment_submission_count ||= AssignmentSubmission.count_by_user_id(@id)
81
+ end
82
+
83
+ def assignment_contents
84
+ @assignment_contents ||= AssignmentContent.find_by_user_id(@id)
85
+ end
86
+
87
+ def assignment_content_count
88
+ @assignment_content_count ||= AssignmentContent.count_by_user_id(@id)
89
+ end
90
+
91
+ def membership
92
+ @membership ||= SiteMembership.find_by_user_id(@id)
93
+ end
94
+
95
+ def site_count
96
+ if @membership.nil?
97
+ Site.count_by_user_id(@id)
98
+ else
99
+ @membership.length
100
+ end
101
+ end
102
+
103
+ def preferences_xml
104
+ if @preferences_xml.nil?
105
+ db = DB.connect
106
+ @preferences_xml = ""
107
+ db.exec("select xml from sakai_preferences " +
108
+ "where preferences_id=:userid", @user_id) do |row|
109
+ REXML::Document.new(row[0].read).write(@preferences_xml, 2)
110
+ end
111
+ end
112
+ @preferences_xml
113
+ end
114
+
115
+ # finders/counters
116
+ @@total_user_count = nil
117
+ def self.count
118
+ if @@total_user_count.nil?
119
+ @@total_user_count = 0
120
+ DB.connect.exec("select count(*) from sakai_user") do |row|
121
+ @@total_user_count = row[0].to_i
122
+ end
123
+ end
124
+ @@total_user_count
125
+ end
126
+
127
+ def self.count_by_realm_id_and_role_id(realm_id, role_id)
128
+ count = 0
129
+ DB.connect.exec("select count(*) from sakai_realm_rl_gr " +
130
+ "where realm_key = :realm_id " +
131
+ "and role_key = :role_id", realm_id, role_id) do |row|
132
+ count = row[0].to_i
133
+ end
134
+ count
135
+ end
136
+
137
+ def self.find_by_realm_id_and_role_id(realm_id, role_id)
138
+ users = []
139
+ DB.connect.exec("select first_name, last_name, type, " +
140
+ "to_char(createdon,'YYYY-MM-DD HH24:MI:SS'), " +
141
+ "to_char(modifiedon,'YYYY-MM-DD HH24:MI:SS') " +
142
+ "from sakai_user where user_id in " +
143
+ "(select user_id from sakai_realm_rl_gr " +
144
+ "where realm_key = :realm_id " +
145
+ "and role_key = :role_id)", realm_id, role_id) do |row|
146
+ first_name, last_name, type, created_at, modified_at = *row
147
+ first_name ||= ""
148
+ last_name ||= ""
149
+ @@cache[eid] =
150
+ @@cache[user_id] =
151
+ User.new(user_id, eid, (first_name+' '+last_name), type, created_at, modified_at)
152
+ users << @@cache[eid]
153
+ end
154
+ users
155
+ end
156
+
157
+ # yaml/json serialization
158
+ def default_serialization
159
+ {
160
+ "id" => self.id,
161
+ "name" => self.name,
162
+ "eid" => self.eid,
163
+ "type" => self.type,
164
+ "created_at" => self.created_at,
165
+ "user_properties" => UserProperty.find_by_user_id(self.id),
166
+ "site_count" => self.site_count,
167
+ "question_pool_count" => self.question_pool_count
168
+ }
169
+ end
170
+
171
+ def summary_serialization
172
+ {
173
+ "id" => self.id,
174
+ "eid" => self.eid,
175
+ "name" => self.name,
176
+ "type" => self.type
177
+ }
178
+ end
179
+
180
+ def membership_serialization
181
+ {
182
+ "sites" => self.membership.collect { |sm| sm.serialize(:user_summary) }
183
+ }
184
+ end
185
+
186
+ def question_pools_serialization
187
+ if self.question_pool_count > 0
188
+ {
189
+ "question_pools" => self.question_pools.collect { |qp| qp.serialize(:user_summary) }
190
+ }
191
+ else
192
+ {}
193
+ end
194
+ end
195
+ end
196
+
197
+ class UserProperty
198
+ def self.get(user_id, property_name)
199
+ db = DB.connect
200
+ value = nil
201
+ db.exec("select value from sakai_user_property " +
202
+ "where user_id=:user_id and name=:name", user_id, property_name) do |row|
203
+ value = row[0].read
204
+ end
205
+ return value
206
+ end
207
+
208
+ def self.find_by_user_id(user_id)
209
+ db = DB.connect
210
+ properties = {}
211
+ db.exec("select name, value from sakai_user_property " +
212
+ "where user_id=:user_id", user_id) do |row|
213
+ name = row[0]
214
+ value = row[1].read
215
+ properties[name] = value
216
+ end
217
+ return properties
218
+ end
219
+ end
220
+ end
@@ -0,0 +1,3 @@
1
+ module SakaiInfo
2
+ VERSION = "0.1.0"
3
+ end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sakai-info
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - David Adams
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-02-19 00:00:00 -06:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: A command line tool and a suite of libraries for representing the objects and relationships defined by a Sakai CLE database.
23
+ email: daveadams@gmail.com
24
+ executables:
25
+ - sakai-info
26
+ extensions: []
27
+
28
+ extra_rdoc_files: []
29
+
30
+ files:
31
+ - lib/sakai-info.rb
32
+ - lib/sakai-info/group.rb
33
+ - lib/sakai-info/samigo.rb
34
+ - lib/sakai-info/cli/help.rb
35
+ - lib/sakai-info/site.rb
36
+ - lib/sakai-info/assignment.rb
37
+ - lib/sakai-info/authz.rb
38
+ - lib/sakai-info/gradebook.rb
39
+ - lib/sakai-info/sakai_object.rb
40
+ - lib/sakai-info/user.rb
41
+ - lib/sakai-info/version.rb
42
+ - lib/sakai-info/announcement.rb
43
+ - lib/sakai-info/cli.rb
44
+ - lib/sakai-info/instance.rb
45
+ - lib/sakai-info/configuration.rb
46
+ - lib/sakai-info/message.rb
47
+ - lib/sakai-info/content.rb
48
+ - lib/sakai-info/db.rb
49
+ - lib/sakai-info/sakai_xml_entity.rb
50
+ - bin/sakai-info
51
+ - README.md
52
+ - LICENSE
53
+ - CHANGELOG.md
54
+ - ROADMAP.md
55
+ has_rdoc: true
56
+ homepage: https://github.com/daveadams/sakai-info
57
+ licenses: []
58
+
59
+ post_install_message:
60
+ rdoc_options: []
61
+
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ hash: 3
70
+ segments:
71
+ - 0
72
+ version: "0"
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ hash: 3
79
+ segments:
80
+ - 0
81
+ version: "0"
82
+ requirements: []
83
+
84
+ rubyforge_project:
85
+ rubygems_version: 1.3.7
86
+ signing_key:
87
+ specification_version: 3
88
+ summary: Tools and library for exploring a Sakai database
89
+ test_files: []
90
+