social_stream 0.11.2 → 0.11.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. data/Gemfile +0 -9
  2. data/base/app/assets/stylesheets/contacts.css.scss +8 -3
  3. data/base/app/assets/stylesheets/frontpage.css.scss +1 -1
  4. data/base/app/assets/stylesheets/search.css.scss +17 -1
  5. data/base/app/controllers/contacts_controller.rb +2 -5
  6. data/base/app/models/contact.rb +3 -2
  7. data/base/app/views/activities/_options.html.erb +1 -1
  8. data/base/app/views/contacts/_form.html.erb +14 -7
  9. data/base/app/views/frontpage/_social_networks.html.erb +3 -0
  10. data/base/app/views/groups/_new.html.erb +2 -2
  11. data/base/app/views/groups/_show.html.erb +1 -2
  12. data/base/app/views/groups/index.html.erb +1 -1
  13. data/base/app/views/layouts/_header_signed_out.erb +1 -3
  14. data/base/app/views/notifications/activities/_follow_subject.html.erb +5 -2
  15. data/base/app/views/notifications/activities/_like_subject.html.erb +6 -2
  16. data/base/app/views/notifications/activities/_make-friend_subject.html.erb +5 -2
  17. data/base/app/views/notifications/activities/_post_subject.html.erb +6 -1
  18. data/base/app/views/notifications/activities/_update_body.html.erb +5 -1
  19. data/base/app/views/notifications/activities/_update_subject.html.erb +5 -1
  20. data/base/app/views/posts/_post_focus_search.html.erb +37 -3
  21. data/base/app/views/posts/_post_global_search.html.erb +2 -0
  22. data/base/app/views/profiles/_contact.html.erb +1 -1
  23. data/base/app/views/search/index.js.erb +2 -0
  24. data/base/app/views/toolbar/_home.html.erb +4 -0
  25. data/base/config/locales/en.yml +26 -0
  26. data/base/config/locales/es.yml +26 -0
  27. data/base/lib/mailboxer/notification_decoder.rb +8 -6
  28. data/base/lib/social_stream-base.rb +1 -1
  29. data/base/lib/social_stream/base/version.rb +1 -1
  30. data/base/lib/social_stream/migrations/components.rb +1 -1
  31. data/base/lib/social_stream/toolbar_config/base.rb +12 -1
  32. data/base/social_stream-base.gemspec +1 -1
  33. data/base/spec/controllers/contacts_controller_spec.rb +4 -4
  34. data/events/app/assets/javascripts/social_stream-events.js +2 -2
  35. data/events/app/assets/stylesheets/social_stream-events.css +3 -0
  36. data/events/{app → vendor}/assets/javascripts/jquery.ad-gallery.js +0 -0
  37. data/events/{app → vendor}/assets/javascripts/jquery.ad-gallery.pack.js +0 -0
  38. data/events/{app → vendor}/assets/stylesheets/ad_next.png +0 -0
  39. data/events/{app → vendor}/assets/stylesheets/ad_prev.png +0 -0
  40. data/events/{app → vendor}/assets/stylesheets/ad_scroll_back.png +0 -0
  41. data/events/{app → vendor}/assets/stylesheets/ad_scroll_forward.png +0 -0
  42. data/events/{app → vendor}/assets/stylesheets/fullcalendar.css +0 -0
  43. data/events/{app → vendor}/assets/stylesheets/fullcalendar.print.css +0 -0
  44. data/events/{app → vendor}/assets/stylesheets/jquery.ad-gallery.css +0 -0
  45. data/events/{app → vendor}/assets/stylesheets/loader.gif +0 -0
  46. data/events/vendor/assets/stylesheets/social_stream-events.css +273 -0
  47. data/lib/social_stream.rb +0 -4
  48. data/lib/social_stream/version.rb +1 -1
  49. data/presence/.gitignore +4 -0
  50. data/presence/Gemfile +4 -0
  51. data/presence/Rakefile +1 -0
  52. data/presence/app/assets/audio/chat/onMessageAudio.mp3 +0 -0
  53. data/presence/app/assets/audio/chat/onMessageAudio.wav +0 -0
  54. data/presence/app/assets/images/arrow.png +0 -0
  55. data/presence/app/assets/images/black_arrow3.png +0 -0
  56. data/presence/app/assets/images/status/available.png +0 -0
  57. data/presence/app/assets/images/status/away.png +0 -0
  58. data/presence/app/assets/images/status/dnd.png +0 -0
  59. data/presence/app/assets/javascripts/jquery-ui-1.8.14.custom.min.js +789 -0
  60. data/presence/app/assets/javascripts/jquery.tools.min.js +17 -0
  61. data/presence/app/assets/javascripts/jquery.tools.tooltip.js +11 -0
  62. data/presence/app/assets/javascripts/jquery.ui.chatbox.js +260 -0
  63. data/presence/app/assets/javascripts/social_stream-presence.js +2 -0
  64. data/presence/app/assets/javascripts/store.js +27 -0
  65. data/presence/app/assets/javascripts/strophe.js +3612 -0
  66. data/presence/app/assets/javascripts/xmpp_client.js +498 -0
  67. data/presence/app/assets/stylesheets/chat.css +231 -0
  68. data/presence/app/assets/stylesheets/jquery.ui.chatbox.css +54 -0
  69. data/presence/app/assets/stylesheets/social_stream-presence.css +3 -0
  70. data/presence/app/controllers/xmpp_controller.rb +190 -0
  71. data/presence/app/helpers/xmpp_helper.rb +33 -0
  72. data/presence/app/views/xmpp/_chat.html.erb +59 -0
  73. data/presence/app/views/xmpp/_chat_connecting.html.erb +8 -0
  74. data/presence/app/views/xmpp/_chat_contacts.html.erb +46 -0
  75. data/presence/app/views/xmpp/_chat_off.html.erb +35 -0
  76. data/presence/app/views/xmpp/active_users.html.erb +33 -0
  77. data/presence/app/views/xmpp/chat.html.erb +13 -0
  78. data/presence/app/views/xmpp/index.html +19 -0
  79. data/presence/app/views/xmpp/test.html.erb +11 -0
  80. data/presence/config/routes.rb +15 -0
  81. data/presence/db/migrate/20110711111408_add_connected_column_to_user.rb +9 -0
  82. data/presence/db/migrate/20110928135031_add_status_column_to_user.rb +9 -0
  83. data/presence/ejabberd/conf/ejabberd.cfg +625 -0
  84. data/presence/ejabberd/conf/ejabberdctl.cfg +154 -0
  85. data/presence/ejabberd/conf/inetrc +3 -0
  86. data/presence/ejabberd/conf/server.pem +37 -0
  87. data/presence/ejabberd/conf/ssconfig.cfg +29 -0
  88. data/presence/ejabberd/ejabberd_scripts/authentication_script +117 -0
  89. data/presence/ejabberd/ejabberd_scripts/authentication_script_org +114 -0
  90. data/presence/ejabberd/ejabberd_scripts/compile_module +34 -0
  91. data/presence/ejabberd/ejabberd_scripts/generate_random_password +18 -0
  92. data/presence/ejabberd/ejabberd_scripts/kill_authentication_script.sh +13 -0
  93. data/presence/ejabberd/ejabberd_scripts/reset_connection_script +55 -0
  94. data/presence/ejabberd/ejabberd_scripts/reset_logs.sh +23 -0
  95. data/presence/ejabberd/ejabberd_scripts/set_connection_script +48 -0
  96. data/presence/ejabberd/ejabberd_scripts/set_presence_script +48 -0
  97. data/presence/ejabberd/ejabberd_scripts/show_config.sh +30 -0
  98. data/presence/ejabberd/ejabberd_scripts/start_ejabberd.sh +68 -0
  99. data/presence/ejabberd/ejabberd_scripts/stop_ejabberd.sh +12 -0
  100. data/presence/ejabberd/ejabberd_scripts/synchronize_presence_script +57 -0
  101. data/presence/ejabberd/ejabberd_scripts/unset_connection_script +48 -0
  102. data/presence/ejabberd/mod_admin_extra/mod_admin_extra.beam +0 -0
  103. data/presence/ejabberd/mod_admin_extra/mod_admin_extra.erl +1560 -0
  104. data/presence/ejabberd/mod_sspresence/mod_sspresence.erl +230 -0
  105. data/presence/lib/social_stream-presence.rb +13 -0
  106. data/presence/lib/social_stream/migrations/presence.rb +9 -0
  107. data/presence/lib/social_stream/presence/config.rb +9 -0
  108. data/presence/lib/social_stream/presence/engine.rb +49 -0
  109. data/presence/lib/social_stream/presence/models/buddy_manager.rb +67 -0
  110. data/presence/social_stream-presence.gemspec +28 -0
  111. data/presence/spec/demo/.gitignore +5 -0
  112. data/presence/spec/demo/.rspec +1 -0
  113. data/presence/spec/demo/README +261 -0
  114. data/presence/spec/demo/Rakefile +7 -0
  115. data/presence/spec/demo/app/assets/images/rails.png +0 -0
  116. data/presence/spec/demo/app/assets/javascripts/application.js +9 -0
  117. data/presence/spec/demo/app/assets/stylesheets/application.css +7 -0
  118. data/presence/spec/demo/app/controllers/application_controller.rb +3 -0
  119. data/presence/spec/demo/app/helpers/application_helper.rb +2 -0
  120. data/presence/spec/demo/app/mailers/.gitkeep +0 -0
  121. data/presence/spec/demo/app/models/.gitkeep +0 -0
  122. data/presence/spec/demo/app/views/layouts/application.html.erb +14 -0
  123. data/presence/spec/demo/autotest/discover.rb +2 -0
  124. data/presence/spec/demo/config.ru +4 -0
  125. data/presence/spec/demo/config/application.rb +41 -0
  126. data/presence/spec/demo/config/boot.rb +6 -0
  127. data/presence/spec/demo/config/database.yml +25 -0
  128. data/presence/spec/demo/config/environment.rb +5 -0
  129. data/presence/spec/demo/config/environments/development.rb +27 -0
  130. data/presence/spec/demo/config/environments/production.rb +54 -0
  131. data/presence/spec/demo/config/environments/test.rb +39 -0
  132. data/presence/spec/demo/config/initializers/backtrace_silencers.rb +7 -0
  133. data/presence/spec/demo/config/initializers/inflections.rb +10 -0
  134. data/presence/spec/demo/config/initializers/mime_types.rb +5 -0
  135. data/presence/spec/demo/config/initializers/secret_token.rb +7 -0
  136. data/presence/spec/demo/config/initializers/session_store.rb +8 -0
  137. data/presence/spec/demo/config/initializers/wrap_parameters.rb +12 -0
  138. data/presence/spec/demo/config/locales/en.yml +5 -0
  139. data/presence/spec/demo/config/routes.rb +58 -0
  140. data/presence/spec/demo/db/seeds.rb +7 -0
  141. data/presence/spec/demo/doc/README_FOR_APP +2 -0
  142. data/presence/spec/demo/lib/tasks/.gitkeep +0 -0
  143. data/presence/spec/demo/log/.gitkeep +0 -0
  144. data/presence/spec/demo/public/404.html +26 -0
  145. data/presence/spec/demo/public/422.html +26 -0
  146. data/presence/spec/demo/public/500.html +26 -0
  147. data/presence/spec/demo/public/favicon.ico +0 -0
  148. data/presence/spec/demo/public/index.html +241 -0
  149. data/presence/spec/demo/public/robots.txt +5 -0
  150. data/presence/spec/demo/script/rails +6 -0
  151. data/presence/spec/demo/spec/spec_helper.rb +27 -0
  152. data/presence/spec/demo/test/fixtures/.gitkeep +0 -0
  153. data/presence/spec/demo/test/functional/.gitkeep +0 -0
  154. data/presence/spec/demo/test/integration/.gitkeep +0 -0
  155. data/presence/spec/demo/test/performance/browsing_test.rb +12 -0
  156. data/presence/spec/demo/test/test_helper.rb +13 -0
  157. data/presence/spec/demo/test/unit/.gitkeep +0 -0
  158. data/presence/spec/demo/vendor/assets/stylesheets/.gitkeep +0 -0
  159. data/presence/spec/demo/vendor/plugins/.gitkeep +0 -0
  160. data/presence/spec/discover.rb +2 -0
  161. data/presence/spec/spec_helper.rb +27 -0
  162. data/social_stream.gemspec +9 -2
  163. data/spec/dummy/config/environments/{test_pg.rb → test_mysql.rb} +6 -2
  164. data/spec/dummy/config/environments/test_postgres.rb +39 -0
  165. data/spec/spec_helper.rb +1 -4
  166. metadata +135 -21
  167. data/base/app/views/groups/_new_activity.html.erb +0 -1
  168. data/base/app/views/groups/_new_activity_fields.html.erb +0 -7
@@ -0,0 +1,231 @@
1
+ /* Chatbox style sheet */
2
+
3
+ .ui-chatbox {
4
+ position: fixed;
5
+ bottom:0;
6
+ padding: 2px 2px 2px 2px;
7
+ padding: 2px 2px 2px 2px;
8
+ background: #CCCCCC;
9
+ }
10
+
11
+ .ui-chatbox-titlebar {
12
+ padding: 3px 3px 3px 3px;
13
+ height: 20px;
14
+ }
15
+
16
+ .ui-chatbox-content {
17
+ padding: 0px 0px 0px 0px;
18
+ margin: 0px 0px 0px 0px;
19
+ border: 0px;
20
+ }
21
+
22
+ .ui-chatbox-log {
23
+ padding: 3px 3px 3px 3px;
24
+ height: 150px;
25
+ overflow-y: auto;
26
+ background: #FFFFFF;
27
+ }
28
+
29
+ .ui-chatbox-input {
30
+ padding: 3px 3px 3px 3px;
31
+ border-top: 1px solid grey;
32
+ overflow: hidden;
33
+ /* background: #FFFFFF; */
34
+ }
35
+
36
+ .ui-chatbox-input-box {
37
+ margin: 5px 5px 5px 5px;
38
+ border: 2px solid lightgrey;
39
+ height: 35px;
40
+ }
41
+
42
+ .ui-chatbox-icon {
43
+ float: right;
44
+ }
45
+
46
+ .ui-chatbox-input-focus {
47
+ border-color: #6699FF;
48
+ }
49
+
50
+ .ui-chatbox-msg {
51
+ float: left;
52
+ clear: both;
53
+ }
54
+
55
+
56
+ /* Presence Partial */
57
+
58
+ div.user_presence {
59
+ float: left;
60
+ position: relative;
61
+ width: 30px;
62
+ height: 30px;
63
+ }
64
+
65
+ .user_presence p {
66
+ text-align: center;
67
+ }
68
+
69
+ #chat_partial {
70
+ width: 150px;
71
+ margin-top: 10px;
72
+ margin-left: 5px;
73
+ margin-right: 5px;
74
+ }
75
+
76
+ .presence_status {
77
+ position: absolute;
78
+ bottom:0px;
79
+ right:0px;
80
+ border:none;
81
+ }
82
+
83
+ .users_connected{
84
+ display: block;
85
+ width: 150px;
86
+ }
87
+
88
+ .chat_off{
89
+ width: 150px;
90
+ }
91
+
92
+ #passwordFormChat{
93
+ width: 150px;
94
+ background-color: #1F4A75;
95
+ padding-top:3px;
96
+ padding-bottom:1px;
97
+ }
98
+
99
+ label.chatPasswordTitle{
100
+ color: white;
101
+ margin-left: 5px;
102
+ }
103
+
104
+ input.chat_password{
105
+ width: 135px;
106
+ margin-left: 5px;
107
+ margin-right: 5px;
108
+ margin-bottom: 5px;
109
+ }
110
+
111
+ input.connectChatButton{
112
+ text-align: center;
113
+ }
114
+
115
+
116
+
117
+
118
+
119
+ /* Tooltip */
120
+
121
+ .tooltip {
122
+ display:none;
123
+ font-size:12px;
124
+ height:21px;
125
+ width:160px;
126
+ padding: 18px 25px 15px 25px;
127
+ margin: -15px 0px 0px 0px;
128
+ color:#fff;
129
+ background:transparent url(black_arrow3.png);
130
+ text-align: center;
131
+ /* border: 5px solid red; */
132
+ }
133
+
134
+
135
+ /* Status style sheet */
136
+
137
+
138
+ #status{
139
+ z-index: 1;
140
+ }
141
+
142
+ .desc {
143
+ color:#6b6b6b;
144
+ }
145
+
146
+ .desc a {
147
+ color:#0092dd;
148
+ }
149
+
150
+ .dropdown dd, .dropdown dt, .dropdown ul {
151
+ margin:0px;
152
+ padding:0px;
153
+ }
154
+
155
+ .dropdown dd {
156
+ position:relative;
157
+ }
158
+
159
+ .dropdown a, .dropdown a:visited {
160
+ color:#1F4A75;
161
+ text-decoration:none;
162
+ outline:none;
163
+ }
164
+
165
+ .dropdown a:hover {
166
+ color:#1F4A75;
167
+ }
168
+ .dropdown dt a:hover {
169
+ color:#1F4A75;
170
+ border: 1px solid #1F4A75;
171
+ }
172
+
173
+ .dropdown dt a {
174
+ background:#DFECF1 url(btn/arrowBlue.png) no-repeat scroll right center;
175
+ display:block;
176
+ padding-right:20px;
177
+ border:1px solid #DFECF1;
178
+ width:128px;
179
+ }
180
+
181
+
182
+
183
+ .dropdown dt a span {
184
+ cursor:pointer;
185
+ display:block;
186
+ padding:5px;
187
+ }
188
+
189
+ .dropdown dd ul {
190
+ background:#DFECF1 none repeat scroll 0 0;
191
+ border:1px solid #DFECF1; color:#DFECF1;
192
+ display:none;
193
+ left:0px;
194
+ padding:5px 0px;
195
+ position:absolute;
196
+ top:2px;
197
+ width:auto;
198
+ min-width:170px;
199
+ list-style:none;
200
+ z-index: 1;
201
+ }
202
+
203
+ .dropdown span.value {
204
+ display:none;
205
+ }
206
+
207
+ .dropdown dd ul li a {
208
+ padding:5px;
209
+ display:block;
210
+ }
211
+
212
+ .dropdown dd ul li a:hover {
213
+ background-color:#D4E5EF;
214
+ }
215
+
216
+ .dropdown img.flag {
217
+ border:none;
218
+ vertical-align:middle;
219
+ margin-left:10px;
220
+ }
221
+
222
+ .flagvisibility {
223
+ display:none;
224
+ }
225
+
226
+ .input_select{
227
+ width: 100%;
228
+ background-color: #D0C9AF;
229
+ margin-top:5px;
230
+ margin-bottom:5px;
231
+ }
@@ -0,0 +1,54 @@
1
+ /* style sheets */
2
+ .ui-chatbox {
3
+ position: fixed;
4
+ bottom:0;
5
+ padding: 2px 2px 2px 2px;
6
+ padding: 2px 2px 2px 2px;
7
+ background: #CCCCCC;
8
+ /* background: #CCCCCC; */
9
+ }
10
+
11
+ .ui-chatbox-titlebar {
12
+ padding: 3px 3px 3px 3px;
13
+ height: 20px;
14
+ }
15
+
16
+ .ui-chatbox-content {
17
+ padding: 0px 0px 0px 0px;
18
+ margin: 0px 0px 0px 0px;
19
+ border: 0px;
20
+ }
21
+
22
+ .ui-chatbox-log {
23
+ padding: 3px 3px 3px 3px;
24
+ height: 150px;
25
+ overflow-y: auto;
26
+ background: #FFFFFF;
27
+ }
28
+
29
+ .ui-chatbox-input {
30
+ padding: 3px 3px 3px 3px;
31
+ border-top: 1px solid grey;
32
+ overflow: hidden;
33
+ /* background: #FFFFFF; */
34
+ }
35
+
36
+ .ui-chatbox-input-box {
37
+ margin: 5px 5px 5px 5px;
38
+ border: 2px solid lightgrey;/* #6699FF */
39
+ /* padding:5px 5px 5px 5px; */
40
+ height: 35px;
41
+ }
42
+
43
+ .ui-chatbox-icon {
44
+ float: right;
45
+ }
46
+
47
+ .ui-chatbox-input-focus {
48
+ border-color: #6699FF;
49
+ }
50
+
51
+ .ui-chatbox-msg {
52
+ float: left;
53
+ clear: both;
54
+ }
@@ -0,0 +1,3 @@
1
+ /*
2
+ *= require_tree .
3
+ */
@@ -0,0 +1,190 @@
1
+ require 'xmpp4r'
2
+ require 'xmpp4r/muc'
3
+ require 'xmpp4r/roster'
4
+ require 'xmpp4r/client'
5
+ require 'xmpp4r/message'
6
+
7
+ class XmppController < ApplicationController
8
+
9
+ #Mapping XMPP Standar Status to Social Stream Chat Status
10
+ STATUS = {
11
+ '' => 'available',
12
+ 'chat' => 'available',
13
+ 'away' => 'away',
14
+ 'xa' => 'away',
15
+ 'dnd' => 'dnd',
16
+ #Special status to disable chat
17
+ 'disable' => 'disable'
18
+ }
19
+
20
+
21
+ #API METHODS
22
+
23
+ def resetConnection
24
+ unless authorization
25
+ render :text => "Authorization error"
26
+ return
27
+ end
28
+
29
+ users = User.find_all_by_connected(true)
30
+
31
+ users.each do |user|
32
+ user.connected = false
33
+ user.save!
34
+ end
35
+
36
+ render :text => "Ok"
37
+ end
38
+
39
+
40
+ def unsetConecction
41
+ unless authorization
42
+ render :text => "Authorization error"
43
+ return
44
+ end
45
+
46
+ user = User.find_by_slug(params[:name])
47
+
48
+ if user && user.connected
49
+ user.connected = false
50
+ user.save!
51
+ render :text => "Ok"
52
+ return
53
+ end
54
+
55
+ render :text => "Error"
56
+ end
57
+
58
+
59
+ def setConnection
60
+ unless authorization
61
+ render :text => "Authorization error"
62
+ return
63
+ end
64
+
65
+ user = User.find_by_slug(params[:name])
66
+
67
+ if user && !user.connected
68
+ user.connected = true
69
+ user.status = "available"
70
+ user.save!
71
+ render :text => "Ok"
72
+ return
73
+ end
74
+
75
+ render :text => "Error"
76
+ end
77
+
78
+
79
+ def synchronizePresence
80
+ unless authorization
81
+ render :text => "Authorization error"
82
+ return
83
+ end
84
+
85
+ #Actual connected users
86
+ user_slugs = params[:name]
87
+
88
+ #Check connected users
89
+ users = User.find_all_by_connected(true)
90
+
91
+ users.each do |user|
92
+ if user_slugs.include?(user.slug) == false
93
+ user.connected = false
94
+ user.save!
95
+ end
96
+ end
97
+
98
+ user_slugs.each do |user_slug|
99
+ u = User.find_by_slug(user_slug)
100
+ if (u != nil && u.connected == false)
101
+ u.connected = true
102
+ u.save!
103
+ end
104
+ end
105
+
106
+ render :text => "ok"
107
+ end
108
+
109
+
110
+ def setPresence
111
+ unless authorization
112
+ render :text => "Authorization error"
113
+ return
114
+ end
115
+
116
+ user = User.find_by_slug(params[:name])
117
+ status = params[:status]
118
+
119
+ if setStatus(user,status)
120
+ render :text => 'Status changed'
121
+ else
122
+ render :text => 'Status not changed'
123
+ end
124
+
125
+ end
126
+
127
+
128
+ def unsetPresence
129
+ unless authorization
130
+ render :text => "Authorization error"
131
+ return
132
+ end
133
+ render :text => "Ok"
134
+ end
135
+
136
+ def authorization
137
+ return params[:password] == Socialstream::Presence::XMPP_SERVER_PASSWORD
138
+ end
139
+
140
+
141
+ def chatWindow
142
+ if (current_user.connected) and (current_user.status != 'disable') and (params[:userConnected]=="true")
143
+ render :partial => 'xmpp/chat_contacts'
144
+ else
145
+ #User not connected or chat desactivated
146
+ render :partial => 'xmpp/chat_off'
147
+ end
148
+ end
149
+
150
+
151
+
152
+
153
+
154
+ #TEST METHODS
155
+ def active_users
156
+ @users = User.find_all_by_connected(true)
157
+ @all_users = User.all
158
+ end
159
+
160
+ def test
161
+ puts "TEST"
162
+ client = Jabber::Client.new(Jabber::JID.new('social_stream-presence@trapo'))
163
+ client.connect
164
+ password = Socialstream::Presence::PASSWORD
165
+ client.auth(password)
166
+
167
+ #Sending a message
168
+ msg = Jabber::Message::new('social_stream-presence@trapo', "Message&order")
169
+ msg.type=:chat
170
+ client.send(msg)
171
+ end
172
+
173
+
174
+
175
+ private
176
+
177
+ def setStatus(user,status)
178
+ if user and status and user.status != status and validStatus(status)
179
+ user.status = STATUS[status]
180
+ user.save!
181
+ return true
182
+ end
183
+ return false
184
+ end
185
+
186
+ def validStatus(status)
187
+ return STATUS.keys.include?(status)
188
+ end
189
+
190
+ end