social_stream 0.15.5 → 0.15.6
Sign up to get free protection for your applications and to get access to all the features.
- data/base/app/assets/stylesheets/base.css.scss +1 -1
- data/base/app/models/activity.rb +1 -1
- data/base/app/models/actor.rb +24 -10
- data/base/app/views/layouts/application.html.erb +1 -0
- data/base/lib/social_stream/base/version.rb +1 -1
- data/lib/social_stream/version.rb +1 -1
- data/linkser/lib/social_stream/linkser/version.rb +1 -1
- data/linkser/social_stream-linkser.gemspec +2 -2
- data/presence/app/assets/javascripts/chat_interface_manager.js.erb +2 -1
- data/presence/app/assets/javascripts/chat_parser.js +14 -0
- data/presence/app/assets/javascripts/chat_window_manager.js +70 -22
- data/presence/app/assets/javascripts/xmpp_client_management.js.erb +2 -2
- data/presence/app/assets/stylesheets/{chat.css → chat.css.scss} +69 -48
- data/presence/ejabberd/ejabberd_files.zip +0 -0
- data/presence/ejabberd/ejabberd_scripts/emanagement +4 -4
- data/presence/ejabberd/ejabberd_scripts/reset_connection_script +6 -3
- data/presence/ejabberd/ejabberd_scripts/rest_api_client_script +5 -2
- data/presence/ejabberd/ejabberd_scripts/synchronize_presence_script +6 -3
- data/presence/ejabberd/mod_sspresence/mod_sspresence.beam +0 -0
- data/presence/lib/social_stream/presence/models/buddy_manager.rb +5 -4
- data/presence/lib/social_stream/presence/version.rb +1 -1
- data/presence/lib/social_stream/presence/xmpp_server_order.rb +14 -3
- data/presence/lib/tasks/presence/installer.rake +4 -2
- data/presence/vendor/assets/javascripts/jquery.ui.chatbox.js +72 -18
- data/social_stream.gemspec +2 -2
- metadata +86 -169
@@ -132,7 +132,7 @@ div.chzn-container ul.chzn-choices li.search-field input{ cursor:pointer;}
|
|
132
132
|
|
133
133
|
/********* Menu header SECTION ************/
|
134
134
|
.menu_list ul{list-style-type:none;}
|
135
|
-
.menu_list li{display: inline;padding-right: 2px; padding-left: 2px; }
|
135
|
+
.menu_list li{display: inline;padding-right: 2px; padding-left: 2px; vertical-align: top; }
|
136
136
|
.line{ display:block; margin:10px 2px 10px 10px;}
|
137
137
|
|
138
138
|
/*************MENU ICON SECTION**********/
|
data/base/app/models/activity.rb
CHANGED
@@ -317,7 +317,7 @@ class Activity < ActiveRecord::Base
|
|
317
317
|
receiver_name= receiver.name.truncate(30, :separator => ' ')
|
318
318
|
case verb
|
319
319
|
when 'like'
|
320
|
-
if direct_object.
|
320
|
+
if direct_object.acts_as_actor?
|
321
321
|
I18n.t('notification.fan',
|
322
322
|
:sender => sender_name,
|
323
323
|
:whose => I18n.t('notification.whose.'+ receiver.subject.class.to_s.underscore,
|
data/base/app/models/actor.rb
CHANGED
@@ -207,16 +207,25 @@ class Actor < ActiveRecord::Base
|
|
207
207
|
Relation::Reject.of(self)
|
208
208
|
end
|
209
209
|
|
210
|
-
# All the {Actor
|
210
|
+
# All the {Actor Actors} this one has ties with:
|
211
|
+
#
|
212
|
+
# actor.contact_actors #=> array of actors that sent and receive ties from actor
|
211
213
|
#
|
212
|
-
#
|
213
|
-
#
|
214
|
-
#
|
215
|
-
#
|
216
|
-
#
|
217
|
-
#
|
218
|
-
#
|
219
|
-
#
|
214
|
+
#
|
215
|
+
#
|
216
|
+
# There are several options available to refine the query:
|
217
|
+
# type:: Filter by the class of the contacts ({User}, {Group}, etc.)
|
218
|
+
# actor.contact_actors(:type => :user) #=> array of user actors. Exclude groups, etc.
|
219
|
+
#
|
220
|
+
# direction:: +:sent+ leaves only the actors this one has ties to. +:received+ gets
|
221
|
+
# the actors sending ties to this actor, whether this actor added them or not
|
222
|
+
# actor.contact_actors(:direction => :sent) #=> all the receivers of ties from actor
|
223
|
+
# relations:: Restrict to ties made up with +relations+. In the case of both directions,
|
224
|
+
# only relations belonging to {Actor} are considered.
|
225
|
+
# It defaults to actor's {Relation::Custom custom relations}
|
226
|
+
# actor.contact_actors(:relations => [2]) #=> actors tied with relation #2
|
227
|
+
# include_self:: False by default, do not include this actor even they have ties with themselves.
|
228
|
+
# load_subjects:: True by default, make the queries for {http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#label-Eager+loading+of+associations eager loading} of {SocialStream::Models::Subject Subject}
|
220
229
|
#
|
221
230
|
def contact_actors(options = {})
|
222
231
|
subject_types = Array(options[:type] || self.class.subtypes)
|
@@ -231,14 +240,19 @@ class Actor < ActiveRecord::Base
|
|
231
240
|
as = as.includes(subject_types)
|
232
241
|
end
|
233
242
|
|
234
|
-
#
|
243
|
+
# A blank :direction means reciprocate contacts, there must be ties in both directions
|
244
|
+
#
|
245
|
+
# This is achieved by getting the id of all the contacts that are sending ties
|
246
|
+
# Then, we filter the sent contacts query to only those contacts
|
235
247
|
if options[:direction].blank?
|
236
248
|
rcv_opts = options.dup
|
237
249
|
rcv_opts[:direction] = :received
|
238
250
|
rcv_opts[:load_subjects] = false
|
239
251
|
|
252
|
+
# Get the id of actors that are sending to this one
|
240
253
|
sender_ids = contact_actors(rcv_opts).map(&:id)
|
241
254
|
|
255
|
+
# Filter the sent query with these ids
|
242
256
|
as = as.where(:id => sender_ids)
|
243
257
|
|
244
258
|
options[:direction] = :sent
|
@@ -7,6 +7,7 @@
|
|
7
7
|
<meta name="keywords" content="<%= t('profile.tags.default') %><%= yield(:keywords) %>" >
|
8
8
|
<meta name="description" content= "<%= yield(:description).empty? ? t('frontpage.main_title') : yield(:description) %>" >
|
9
9
|
<meta name="generator" content="SocialStream" />
|
10
|
+
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no" />
|
10
11
|
|
11
12
|
<%= stylesheet_link_tag "application" %>
|
12
13
|
<%= javascript_include_tag "application" %>
|
@@ -12,8 +12,8 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.files = `git ls-files`.split("\n")
|
13
13
|
|
14
14
|
# Gem dependencies
|
15
|
-
s.add_runtime_dependency('social_stream-base', '~> 0.10.
|
16
|
-
s.add_runtime_dependency('linkser', '~> 0.0.
|
15
|
+
s.add_runtime_dependency('social_stream-base', '~> 0.10.9')
|
16
|
+
s.add_runtime_dependency('linkser', '~> 0.0.8')
|
17
17
|
# Development Gem dependencies
|
18
18
|
s.add_development_dependency('sqlite3-ruby')
|
19
19
|
if RUBY_VERSION < '1.9'
|
@@ -278,9 +278,10 @@ function putReceivedMessageOnChatWindow(from_jid,from_slug,body,msgID){
|
|
278
278
|
|
279
279
|
//Parse content before show it.
|
280
280
|
var content = getParsedContent(Strophe.getText(body), false)
|
281
|
+
var headerMessage = getParsedName(from_name,false);
|
281
282
|
|
282
283
|
//Show message to chatBox.
|
283
|
-
$("#" + from_slug).chatbox("option", "boxManager").addMsg(
|
284
|
+
$("#" + from_slug).chatbox("option", "boxManager").addMsg(headerMessage, content);
|
284
285
|
|
285
286
|
//Rotate chatBoxes priority.
|
286
287
|
rotatePriority(from_slug);
|
@@ -241,3 +241,17 @@ function getUrlType(url){
|
|
241
241
|
return "link"
|
242
242
|
}
|
243
243
|
}
|
244
|
+
|
245
|
+
|
246
|
+
///////////////////////////////////////////////////////
|
247
|
+
// Parsing user titles
|
248
|
+
///////////////////////////////////////////////////////
|
249
|
+
|
250
|
+
function getParsedName(name, fromUser){
|
251
|
+
if (fromUser){
|
252
|
+
var chatTextclass = "ownName"
|
253
|
+
} else {
|
254
|
+
var chatTextclass = "guestName"
|
255
|
+
}
|
256
|
+
return ("<span class=\"" + chatTextclass + "\">" + name + "</span>");
|
257
|
+
}
|
@@ -1,10 +1,12 @@
|
|
1
1
|
////////////////////
|
2
|
-
//Chat functions
|
2
|
+
//Chat Window Manager functions
|
3
3
|
////////////////////
|
4
4
|
|
5
5
|
var nBox = 0;
|
6
6
|
var maxBox = 5;
|
7
7
|
var chatBoxWidth = 230;
|
8
|
+
var chatBoxHeight = 170;
|
9
|
+
var videoBoxHeight = 150;
|
8
10
|
var visibleChatBoxes = new Array();
|
9
11
|
var chatBoxSeparation = chatBoxWidth+12;
|
10
12
|
|
@@ -19,8 +21,6 @@ function createChatBox(guest_slug,guest_name,guest_jid,user_name,user_jid){
|
|
19
21
|
|
20
22
|
//Add div with id = guest_slug
|
21
23
|
$("#chat_divs").append("<div id=" + guest_slug + " name=" + guest_name + "></div>")
|
22
|
-
|
23
|
-
//Add CSS [...]
|
24
24
|
|
25
25
|
|
26
26
|
//Offset Management for new box
|
@@ -34,6 +34,8 @@ function createChatBox(guest_slug,guest_name,guest_jid,user_name,user_jid){
|
|
34
34
|
hidden: false,
|
35
35
|
offset: offset, // relative to right edge of the browser window
|
36
36
|
width: chatBoxWidth, // width of the chatbox
|
37
|
+
height: chatBoxHeight, // height of the chatbox
|
38
|
+
video: 0, //height of the videoBox
|
37
39
|
title : guest_name,
|
38
40
|
position: position,
|
39
41
|
priority: visibleChatBoxes.length+1,
|
@@ -53,7 +55,8 @@ function createChatBox(guest_slug,guest_name,guest_jid,user_name,user_jid){
|
|
53
55
|
|
54
56
|
messageSent : function(id, user, msg) {
|
55
57
|
rotatePriority(guest_slug);
|
56
|
-
|
58
|
+
var headerMessage = getParsedName(id,true);
|
59
|
+
$("#" + guest_slug).chatbox("option", "boxManager").addMsg(headerMessage, getParsedContent(msg,true));
|
57
60
|
sendChatMessage(user_jid,guest_jid,msg);
|
58
61
|
}});
|
59
62
|
|
@@ -102,37 +105,82 @@ function getBoxParams(){
|
|
102
105
|
}
|
103
106
|
|
104
107
|
|
108
|
+
function getChatVariableFromSlug(slug){
|
109
|
+
return "slug_" + slug;
|
110
|
+
}
|
111
|
+
|
112
|
+
|
113
|
+
function getSlugFromChatVariable(variable){
|
114
|
+
return variable.split("_")[1];
|
115
|
+
}
|
116
|
+
|
117
|
+
|
118
|
+
////////////////////
|
119
|
+
//Box replacement
|
120
|
+
////////////////////
|
121
|
+
|
105
122
|
function getBoxIndexToReplace(){
|
106
123
|
|
107
|
-
|
108
|
-
|
124
|
+
tmp = visibleChatBoxes[0];
|
125
|
+
for (i=0;i<visibleChatBoxes.length;i++){
|
109
126
|
if (visibleChatBoxes[i].chatbox("option", "priority") > tmp.chatbox("option", "priority")) {
|
110
|
-
|
111
|
-
|
127
|
+
tmp = visibleChatBoxes[i];
|
128
|
+
}
|
112
129
|
}
|
113
|
-
|
114
|
-
|
130
|
+
|
131
|
+
return visibleChatBoxes.indexOf(tmp);
|
115
132
|
}
|
116
133
|
|
117
134
|
|
118
135
|
function rotatePriority(guest_slug){
|
119
|
-
|
120
|
-
|
121
|
-
|
136
|
+
priority = $("#" + guest_slug).chatbox("option", "priority")
|
137
|
+
if(priority>1){
|
138
|
+
for (i=0;i<visibleChatBoxes.length;i++){
|
122
139
|
if(visibleChatBoxes[i].chatbox("option", "priority")<priority){
|
123
|
-
|
124
|
-
|
125
|
-
}
|
126
|
-
|
127
|
-
|
140
|
+
visibleChatBoxes[i].chatbox("option", "priority",visibleChatBoxes[i].chatbox("option", "priority")+1);
|
141
|
+
}
|
142
|
+
}
|
143
|
+
$("#" + guest_slug).chatbox("option", "priority", 1);
|
144
|
+
}
|
128
145
|
}
|
129
146
|
|
130
147
|
|
131
|
-
|
132
|
-
|
148
|
+
////////////////////
|
149
|
+
//Video Window Manager functions
|
150
|
+
////////////////////
|
151
|
+
|
152
|
+
function getVideoBoxFromSlug(slug){
|
153
|
+
return $("#" + slug).parent().find("div.ui-videobox")
|
133
154
|
}
|
134
155
|
|
156
|
+
function showVideoBox(slug,embed){
|
157
|
+
var chatBox = window[getChatVariableFromSlug(slug)]
|
158
|
+
getVideoBoxFromSlug(slug).html(embed);
|
159
|
+
chatBox.chatbox("option", "video",videoBoxHeight);
|
160
|
+
}
|
135
161
|
|
136
|
-
|
137
|
-
|
162
|
+
|
163
|
+
function hideVideoBox(slug){
|
164
|
+
var chatBox = window[getChatVariableFromSlug(slug)]
|
165
|
+
chatBox.chatbox("option", "video", 0);
|
166
|
+
}
|
167
|
+
|
168
|
+
|
169
|
+
//Function called from JQuery UI Plugin
|
170
|
+
function toogleVideoBox(uiElement){
|
171
|
+
var slug = $(uiElement.element).attr("id");
|
172
|
+
toogleVideoBoxForSlug(slug)
|
173
|
+
}
|
174
|
+
|
175
|
+
function toogleVideoBoxForSlug(slug){
|
176
|
+
var chatBox = window[getChatVariableFromSlug(slug)]
|
177
|
+
if (chatBox.chatbox("option", "video")==0){
|
178
|
+
showVideoBox(slug,getVideoEmbedForSlug(slug))
|
179
|
+
} else {
|
180
|
+
hideVideoBox(slug);
|
181
|
+
}
|
182
|
+
}
|
183
|
+
|
184
|
+
function getVideoEmbedForSlug(slug){
|
185
|
+
return "<img src=\"http://www.batiburrillo.net/wp-content/uploads/2011/03/Freemake.jpg?cda6c1\" width=\"" + (chatBoxWidth-20) + "\"/>"
|
138
186
|
}
|
@@ -91,10 +91,10 @@ function ifCookie(){
|
|
91
91
|
|
92
92
|
//Global variables
|
93
93
|
var userStatus = "chat";
|
94
|
-
var awayTimerPeriod =
|
94
|
+
var awayTimerPeriod = 60000;
|
95
95
|
var timerPeriod = 5000;
|
96
96
|
var refreshMinTime = 3*timerPeriod;
|
97
|
-
var awayTime =
|
97
|
+
var awayTime = 20*60000; //20 minutes
|
98
98
|
var awayCounter = 0;
|
99
99
|
var timerCounter = 0;
|
100
100
|
var connection = null;
|
@@ -1,21 +1,28 @@
|
|
1
|
+
@import "colors";
|
2
|
+
|
3
|
+
|
1
4
|
/* Chatbox style sheet */
|
2
5
|
|
6
|
+
.ui-widget-content{
|
7
|
+
border: none;
|
8
|
+
}
|
9
|
+
|
3
10
|
.ui-chatbox {
|
4
11
|
position: fixed;
|
5
12
|
bottom:0;
|
6
13
|
padding: 2px 2px 2px 2px;
|
7
14
|
padding: 2px 2px 2px 2px;
|
8
|
-
background:
|
15
|
+
background: $separation-color;
|
9
16
|
}
|
10
17
|
|
11
18
|
.ui-state-highlight {
|
12
|
-
background:
|
13
|
-
background-color:
|
14
|
-
border: 1px solid
|
19
|
+
background: $separation-color;
|
20
|
+
background-color: $separation-color;
|
21
|
+
border: 1px solid $separation-color;
|
15
22
|
}
|
16
23
|
|
17
24
|
.chatWindowhighlighted {
|
18
|
-
color:
|
25
|
+
color: $fill-color;
|
19
26
|
}
|
20
27
|
|
21
28
|
.ui-chatbox-titlebar {
|
@@ -33,28 +40,28 @@
|
|
33
40
|
padding: 3px 3px 3px 3px;
|
34
41
|
height: 150px;
|
35
42
|
overflow-y: auto;
|
36
|
-
background:
|
43
|
+
background: $text-over-main;
|
37
44
|
}
|
38
45
|
|
39
46
|
.ui-chatbox-input {
|
40
47
|
padding: 3px 3px 3px 3px;
|
41
|
-
border-top: 1px solid
|
48
|
+
border-top: 1px solid $separation-color;
|
42
49
|
overflow: hidden;
|
43
|
-
/* background: #FFFFFF; */
|
44
50
|
}
|
45
51
|
|
46
52
|
.ui-chatbox-input-box {
|
47
53
|
margin: 5px 5px 5px 5px;
|
48
|
-
border:
|
54
|
+
border: 1px solid $separation-color;
|
49
55
|
height: 35px;
|
50
56
|
}
|
51
57
|
|
58
|
+
|
52
59
|
.ui-chatbox-icon {
|
53
60
|
float: right;
|
54
61
|
}
|
55
62
|
|
56
63
|
.ui-chatbox-input-focus {
|
57
|
-
border-color:
|
64
|
+
border-color: $header-notification-color;
|
58
65
|
}
|
59
66
|
|
60
67
|
.ui-chatbox-msg {
|
@@ -62,10 +69,27 @@
|
|
62
69
|
clear: both;
|
63
70
|
}
|
64
71
|
|
72
|
+
.ui-chatbox-log {
|
73
|
+
border: none;
|
74
|
+
}
|
75
|
+
|
76
|
+
|
77
|
+
/* video window style */
|
78
|
+
div.ui-videobox{
|
79
|
+
height: 0px;
|
80
|
+
border-bottom: 1px solid $separation-color;
|
81
|
+
}
|
82
|
+
|
83
|
+
div.ui-videobox-icon{
|
84
|
+
|
85
|
+
}
|
86
|
+
|
87
|
+
/* notifications style sheet */
|
88
|
+
|
65
89
|
div.ui-chatbox-notify{
|
66
90
|
visibility: hidden;
|
67
|
-
background:
|
68
|
-
background-color:
|
91
|
+
background: $fill-color;
|
92
|
+
background-color: $fill-color;
|
69
93
|
color: black;
|
70
94
|
z-index: 1;
|
71
95
|
position:absolute;
|
@@ -76,7 +100,7 @@ div.ui-chatbox-notify{
|
|
76
100
|
text-align: center;
|
77
101
|
border-style:solid;
|
78
102
|
border-width:1px;
|
79
|
-
border-color:
|
103
|
+
border-color: $fill-color;
|
80
104
|
opacity:0.95;
|
81
105
|
filter:alpha(opacity=95); /* For IE8 and earlier */
|
82
106
|
}
|
@@ -87,6 +111,7 @@ p.ui-chatbox-notify-text{
|
|
87
111
|
}
|
88
112
|
|
89
113
|
|
114
|
+
|
90
115
|
/* Ticks */
|
91
116
|
|
92
117
|
.chat-thick {
|
@@ -108,6 +133,10 @@ p.ui-chatbox-notify-text{
|
|
108
133
|
background-position: -96px -128px;
|
109
134
|
}
|
110
135
|
|
136
|
+
.chat-videothick{
|
137
|
+
display: none;
|
138
|
+
}
|
139
|
+
|
111
140
|
|
112
141
|
/* Presence Partial */
|
113
142
|
|
@@ -147,7 +176,7 @@ div.user_presence {
|
|
147
176
|
|
148
177
|
#passwordFormChat{
|
149
178
|
width: 150px;
|
150
|
-
background-color:
|
179
|
+
background-color: $main-color;
|
151
180
|
padding-top:3px;
|
152
181
|
padding-bottom:1px;
|
153
182
|
}
|
@@ -168,7 +197,7 @@ input.chat_password{
|
|
168
197
|
input.connectChatButton{
|
169
198
|
text-align: center;
|
170
199
|
width: 150px;
|
171
|
-
background-color:
|
200
|
+
background-color: $main-color;
|
172
201
|
border: 0 none;
|
173
202
|
cursor: pointer;
|
174
203
|
color: white;
|
@@ -189,28 +218,19 @@ input.connectChatButton{
|
|
189
218
|
width:160px;
|
190
219
|
padding: 18px 25px 15px 25px;
|
191
220
|
margin: -15px 0px 0px 0px;
|
192
|
-
color
|
221
|
+
color: white;
|
193
222
|
background:transparent url(black_arrow3.png);
|
194
223
|
text-align: center;
|
195
|
-
/* border: 5px solid red; */
|
196
224
|
}
|
197
225
|
|
198
226
|
|
199
|
-
/* Status style sheet */
|
200
227
|
|
228
|
+
/* Status style sheet */
|
201
229
|
|
202
230
|
#status{
|
203
231
|
z-index: 1;
|
204
232
|
}
|
205
|
-
|
206
|
-
.desc {
|
207
|
-
color:#6b6b6b;
|
208
|
-
}
|
209
|
-
|
210
|
-
.desc a {
|
211
|
-
color:#0092dd;
|
212
|
-
}
|
213
|
-
|
233
|
+
|
214
234
|
.dropdown dd, .dropdown dt, .dropdown ul {
|
215
235
|
margin:0px;
|
216
236
|
padding:0px;
|
@@ -221,29 +241,28 @@ input.connectChatButton{
|
|
221
241
|
}
|
222
242
|
|
223
243
|
.dropdown a, .dropdown a:visited {
|
224
|
-
color
|
244
|
+
color: $main-color;
|
225
245
|
text-decoration:none;
|
226
246
|
outline:none;
|
227
247
|
}
|
228
248
|
|
229
249
|
.dropdown a:hover {
|
230
|
-
color
|
250
|
+
color: $main-color;
|
231
251
|
}
|
232
252
|
.dropdown dt a:hover {
|
233
|
-
color
|
234
|
-
border: 1px solid
|
253
|
+
color: $main-color;
|
254
|
+
border: 1px solid $main-color;
|
235
255
|
}
|
236
256
|
|
237
257
|
.dropdown dt a {
|
238
|
-
background
|
258
|
+
background:$secondary-color url(btn/arrowBlue.png) no-repeat scroll right center;
|
239
259
|
display:block;
|
240
260
|
padding-right:20px;
|
241
|
-
border:1px solid
|
261
|
+
border:1px solid $secondary-color;
|
242
262
|
width:128px;
|
243
263
|
}
|
244
264
|
|
245
265
|
|
246
|
-
|
247
266
|
.dropdown dt a span {
|
248
267
|
cursor:pointer;
|
249
268
|
display:block;
|
@@ -251,8 +270,9 @@ input.connectChatButton{
|
|
251
270
|
}
|
252
271
|
|
253
272
|
.dropdown dd ul {
|
254
|
-
background
|
255
|
-
border:1px solid
|
273
|
+
background: $secondary-color none repeat scroll 0 0;
|
274
|
+
border:1px solid $secondary-color;
|
275
|
+
color: $secondary-color;
|
256
276
|
display:none;
|
257
277
|
left:0px;
|
258
278
|
padding:5px 0px;
|
@@ -274,7 +294,7 @@ input.connectChatButton{
|
|
274
294
|
}
|
275
295
|
|
276
296
|
.dropdown dd ul li a:hover {
|
277
|
-
background-color
|
297
|
+
background-color: $separation-color;
|
278
298
|
}
|
279
299
|
|
280
300
|
.dropdown img.flag {
|
@@ -287,22 +307,23 @@ input.connectChatButton{
|
|
287
307
|
display:none;
|
288
308
|
}
|
289
309
|
|
290
|
-
.input_select{
|
291
|
-
width: 100%;
|
292
|
-
background-color: #D0C9AF;
|
293
|
-
margin-top:5px;
|
294
|
-
margin-bottom:5px;
|
295
|
-
}
|
296
|
-
|
297
310
|
|
298
311
|
/* Chat text style */
|
299
312
|
|
300
313
|
.ownChatText {
|
301
|
-
color:
|
314
|
+
color: $main-color;
|
302
315
|
}
|
303
316
|
|
304
317
|
.guestChatText {
|
305
|
-
color:
|
318
|
+
color: $sentence-color;
|
319
|
+
}
|
320
|
+
|
321
|
+
.ownName {
|
322
|
+
color: $main-color;
|
323
|
+
}
|
324
|
+
|
325
|
+
.guestName {
|
326
|
+
color: $sentence-color;
|
306
327
|
}
|
307
328
|
|
308
329
|
.chatImage {
|
@@ -321,9 +342,9 @@ input.connectChatButton{
|
|
321
342
|
}
|
322
343
|
|
323
344
|
a.chatLink:link, a.chatLink:visited {
|
324
|
-
color:
|
345
|
+
color: $main-color;
|
325
346
|
}
|
326
347
|
|
327
348
|
a.chatImageLink:link, a.chatImageLink:visited {
|
328
|
-
color:
|
349
|
+
color: $main-color;
|
329
350
|
}
|
Binary file
|
@@ -54,7 +54,7 @@ PARAMS_FOR_COMMANDS = {
|
|
54
54
|
'sendMessageToUser' => 3,
|
55
55
|
'getUserResource' => 1,
|
56
56
|
'isEjabberdNodeStarted' => 0,
|
57
|
-
'broadcast' =>
|
57
|
+
'broadcast' => 3,
|
58
58
|
'checkEjabberdctlQuotedString' => 0,
|
59
59
|
'getConnectedUsers' => 0,
|
60
60
|
'help' => 0,
|
@@ -79,7 +79,7 @@ SYNTAX_FOR_COMMANDS = {
|
|
79
79
|
'sendMessageToUser' => 'sendMessageToUser from_name to_name msg',
|
80
80
|
'getUserResource' => 'getUserResource username',
|
81
81
|
'isEjabberdNodeStarted' => 'isEjabberdNodeStarted',
|
82
|
-
'broadcast' => 'broadcast users msg (users values: "all" or slugs array)',
|
82
|
+
'broadcast' => 'broadcast admin users msg (users values: "all" or slugs array)',
|
83
83
|
'checkEjabberdctlQuotedString' => 'checkEjabberdctlQuotedString',
|
84
84
|
'getConnectedUsers' => 'getConnectedUsers',
|
85
85
|
'help' => 'help',
|
@@ -364,7 +364,7 @@ def getConnectedUsers
|
|
364
364
|
return users
|
365
365
|
end
|
366
366
|
|
367
|
-
def broadcast(users,msg)
|
367
|
+
def broadcast(admin,users,msg)
|
368
368
|
output = executeCommand("ejabberdctl connected-users")
|
369
369
|
lines = output.split("\n");
|
370
370
|
lines.each do |line|
|
@@ -372,7 +372,7 @@ def broadcast(users,msg)
|
|
372
372
|
if (users == "all") or (users.length > 1 and users.include?(username))
|
373
373
|
s = line.split("@")[1];
|
374
374
|
resource = s.split("/")[1];
|
375
|
-
sendMessageToUser(
|
375
|
+
sendMessageToUser(admin,username,msg)
|
376
376
|
end
|
377
377
|
end
|
378
378
|
return "Done"
|
@@ -6,8 +6,6 @@
|
|
6
6
|
|
7
7
|
require 'logger'
|
8
8
|
require 'rest_client'
|
9
|
-
require 'openssl'
|
10
|
-
require 'digest/md5'
|
11
9
|
|
12
10
|
|
13
11
|
path = "/var/log/ejabberd/scripts.log"
|
@@ -34,7 +32,7 @@ end
|
|
34
32
|
$secure_rest_api = getOption("secure_rest_api=")
|
35
33
|
$pass = getOption("ejabberd_password=")
|
36
34
|
$scripts_path = getOption("scripts_path=")
|
37
|
-
$script_title = "Reset Connection
|
35
|
+
$script_title = "Reset Connection Script"
|
38
36
|
|
39
37
|
|
40
38
|
def log(title,text)
|
@@ -194,6 +192,9 @@ def sendHttpRequest(url,params,encrypted_params)
|
|
194
192
|
|
195
193
|
|
196
194
|
if $secure_rest_api == "true"
|
195
|
+
#Require libraries
|
196
|
+
require 'openssl'
|
197
|
+
|
197
198
|
xmpp_private_key_path = $scripts_path + "/rsa_keys/xmpp_rsa_key_private.pem";
|
198
199
|
web_public_key_path = $scripts_path + "/rsa_keys/web_rsa_key_public.pem";
|
199
200
|
xmpp_private_key = OpenSSL::PKey::RSA.new(File.read(xmpp_private_key_path))
|
@@ -241,6 +242,8 @@ end
|
|
241
242
|
|
242
243
|
|
243
244
|
def calculateHash(request_params)
|
245
|
+
require 'digest/md5'
|
246
|
+
|
244
247
|
unless request_params
|
245
248
|
request_params = {};
|
246
249
|
end
|