social_stream 0.15.4 → 0.15.5

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.
Files changed (37) hide show
  1. data/base/app/models/actor.rb +9 -5
  2. data/base/app/models/contact.rb +9 -2
  3. data/base/app/models/relation.rb +29 -12
  4. data/base/app/models/tie.rb +8 -15
  5. data/base/app/views/groups/_new.html.erb +18 -0
  6. data/base/app/views/layouts/application.html.erb +1 -0
  7. data/base/app/views/profiles/edit.html.erb +10 -0
  8. data/base/lib/social_stream/base/version.rb +1 -1
  9. data/base/lib/social_stream/models/subject.rb +3 -7
  10. data/lib/social_stream/version.rb +1 -1
  11. data/linkser/app/assets/stylesheets/linkser.css.scss +8 -0
  12. data/linkser/app/controllers/linkser_controller.rb +12 -7
  13. data/linkser/app/models/link.rb +6 -3
  14. data/linkser/app/views/links/_error.html.erb +4 -0
  15. data/linkser/lib/social_stream/linkser/version.rb +1 -1
  16. data/linkser/social_stream-linkser.gemspec +1 -1
  17. data/presence/.gitignore +1 -0
  18. data/presence/app/controllers/xmpp_controller.rb +41 -52
  19. data/presence/ejabberd/conf/ssconfig_example.cfg +2 -1
  20. data/presence/ejabberd/ejabberd_files.zip +0 -0
  21. data/presence/ejabberd/ejabberd_scripts/reset_connection_script +255 -13
  22. data/presence/ejabberd/ejabberd_scripts/rest_api_client_script +301 -0
  23. data/presence/ejabberd/ejabberd_scripts/synchronize_presence_script +256 -18
  24. data/presence/ejabberd/mod_sspresence/mod_sspresence.beam +0 -0
  25. data/presence/ejabberd/mod_sspresence/mod_sspresence.erl +10 -10
  26. data/presence/lib/generators/social_stream/presence/templates/initializer.rb +6 -4
  27. data/presence/lib/social_stream-presence.rb +2 -0
  28. data/presence/lib/social_stream/presence/version.rb +1 -1
  29. data/presence/lib/social_stream/presence/xmpp_server_order.rb +190 -12
  30. data/presence/lib/tasks/presence/installer.rake +38 -4
  31. data/social_stream.gemspec +2 -2
  32. data/spec/support/optimizations.rb +4 -0
  33. metadata +13 -14
  34. data/presence/ejabberd/ejabberd_scripts/set_connection_script +0 -48
  35. data/presence/ejabberd/ejabberd_scripts/set_presence_script +0 -48
  36. data/presence/ejabberd/ejabberd_scripts/unset_connection_script +0 -48
  37. data/presence/ejabberd/ejabberd_scripts/unset_presence_script +0 -48
@@ -1,14 +1,18 @@
1
- # An {Actor} is a social entity. This includes individuals, but also groups, departments,
1
+ # An {Actor} represents a social entity. This includes individuals, but also groups, departments,
2
2
  # organizations even nations or states.
3
3
  #
4
- # Actors are the nodes of a social network. Two actors are linked by a {Tie}. The
5
- # type of a {tie} is a {Relation}. Each actor can define and customize their relations.
4
+ # Actors are the nodes of a social network. Two actors are linked by {Tie Ties}. The
5
+ # type of a {Tie} is a {Relation}. Each actor can define and customize their relations own
6
+ # {Relation Relations}.
7
+ #
8
+ # Every {Actor} has an Avatar, a {Profile} with personal o group information, contact data, etc.
6
9
  #
7
10
  # = Actor subtypes
8
11
  # An actor subtype is called a {SocialStream::Models::Subject Subject}.
9
- # {SocialStream} provides 2 actor subtypes, {User} and {Group}, but the
12
+ # {SocialStream} provides two actor subtypes, {User} and {Group}, but the
10
13
  # application developer can define as many actor subtypes as required.
11
- # Actors subtypes are added to +config/initializers/social_stream.rb+
14
+ # Actor subtypes are added to +config/initializers/social_stream.rb+
15
+ #
12
16
  #
13
17
  class Actor < ActiveRecord::Base
14
18
  @subtypes_name = :subject
@@ -1,8 +1,15 @@
1
- # The link between two {Actor actors}
1
+ # A {Contact} is an ordered pair of {Actor Actors},
2
+ # and therefore two {SocialStream::Models::Subject Subjects}.
2
3
  #
3
- # Each {Contact} has many {Tie ties}, which determine the kind of the link through {Relation relations}
4
+ # {Contact Contacts} are created at convenience (in the case of {Actor#suggestions suggestions},
5
+ # for instance), and they do not mean that there is a real link between those two
6
+ # {SocialStream::Models::Subject Subjects}. Link existance is stored as {Tie Ties}.
4
7
  #
5
8
  # = {Contact Contacts} and {Activity activities}
9
+ #
10
+ # WARNING: This will be change soon to direct references to author, owner and user_author,
11
+ # in the same way as {ActivityObject}
12
+ #
6
13
  # Each {Activity} is attached to a {Contact}. When _Alice_ post in _Bob_'s wall,
7
14
  # the {Activity} is attached to the {Contact} from _Alice_ to _Bob_
8
15
  #
@@ -1,26 +1,43 @@
1
- # A relation defines a type of {Tie tie}. Relations are affective (friendship, liking,
2
- # respect), formal or biological (authority, kinship), transfer of material
3
- # resources (transactions, lending and borrowing), messages or conversations,
4
- # physical connection and affiliation to same organizations.
1
+ # A relation defines a type of {Tie} between two {Actor Actors}. From social literature,
2
+ # {Relation Relations} can be affective (friendship, liking, respect), formal or biological
3
+ # (authority, kinship), transfer of material resources (transactions, lending and borrowing),
4
+ # messages or conversations, physical connection and affiliation to same organizations.
5
5
  #
6
- # = Strength hierarchies
6
+ # = Relation types defined in {SocialStream Social Stream}
7
7
  #
8
- # Relations are arranged in strength hierarchies, denoting that some ties between
9
- # two actors are stronger than others. For example, a "friend" relation is stronger than
10
- # an "acquaintance" relation.
8
+ # All the above cases could be supported in {SocialStream Social Stream}.
9
+ # Nevertheless, the following {Relation Relations} are defined. All of them inherit from the
10
+ # {Relation} class:
11
11
  #
12
- # When a strong tie is established, ties with weaker relations are establised as well
12
+ # {Relation::Custom}:: user-defined {Relation}. Every {SocialStream::Models::Subject Subject}
13
+ # is able to define their own {Relation::Custom Custom relation},
14
+ # giving them a custom name
15
+ # (for instance: friend, colleague, partner, buddy) and {Permission Permissions}.
16
+ # {Relation::Public}:: default {Relation} for ocassional {Tie Ties}.
17
+ # {Relation::Reject}:: the {SocialStream::Models::Subject Subject} does not want to add the other
18
+ # as a contact. A new {Tie} is created using this {Relation}
19
+ #
20
+ # You can define new {Relation Relations} in your application. Just create a new class and
21
+ # inherit from {Relation}. This class already supports
22
+ # {http://api.rubyonrails.org/classes/ActiveRecord/Base.html#label-Single+table+inheritance Single Table Inheritance (STI)}.
23
+ #
24
+ # = Relations and link building
25
+ #
26
+ # When a {SocialStream::Models::Subject Subject} creates a new link to other
27
+ # {SocialStream::Models::Subject Subject}, she must specify one or serveral {Relation Relations}
28
+ # for that link. (friend, colleague, {Relation::Public} or {Relation::Reject}.
29
+ # A new {Tie} will be created for each {Relation}
13
30
  #
14
31
  # = Permissions
15
32
  #
16
- # {SocialStream::Models::Subject Subjects} assign {Permission permissions} to relations.
33
+ # {SocialStream::Models::Subject Subjects} assign {Permission permissions} to {Relation Relations}.
17
34
  # This way, when establishing {Tie ties}, they are granting permissions to their contacts.
18
35
  #
19
36
  # See the documentation of {Permission} for more details on permission definition.
20
37
  #
21
- # = {Activity Activities} and {Relation relations}
38
+ # = {Activity Activities} and {Relation Relations}
39
+ #
22
40
  # Each {Activity} can be attached to one or more {Relation relations}.
23
- # The {Relation} sets up the mode in which the {Activity} is shared.
24
41
  # It sets the {Audience} that has access to it, and the {Permission Permissions} that rule that access.
25
42
  #
26
43
  class Relation < ActiveRecord::Base
@@ -1,25 +1,17 @@
1
- # A {Tie} is a link between two {Actor Actors} ({Contact}) with a {Relation}.
2
- #
3
- # The first {Actor} is the sender of the {Tie}. The second {Actor}
4
- # is the receiver of the {Tie}.
5
- #
6
- # = Tie strengh
7
- #
8
- # Because each {Tie} belongs to a {Relation} and {Relation Relations} have strength
9
- # hierarchies, {Tie Ties} also have them. A {Tie} is stronger than other if its
10
- # {Relation} is stronger than the other's. For example, if _Alice_ has a _friend_ {Tie}
11
- # with _Bob_, and an _acquaintance_ {Tie} with _Charlie_, given that _friend_ {Relation}
12
- # is stronger than _acquaintance_, the {Tie} with _Bob_ is stronger than the {Tie} with
13
- # _Charlie_.
1
+ # A {Tie} is a link between two {Actor Actors},
2
+ # and therefore, two {SocialStream::Models::Subject Subjects}.
14
3
  #
4
+ # It is made up with a {Contact} and a {Relation}. The {Contact} defines the sender
5
+ # or {Actor} that declares the link, and the receiver or {Actor} that is pointed by
6
+ # the declaration. The {Relation} defines the type of link (friend, colleague,
7
+ # {Relation::Reject}, etc)
8
+
15
9
  # = Authorization
16
10
  # When an {Actor} establishes a {Tie} with other, she is granting a set of
17
11
  # {Permission Permissions} to them (posting to her wall, reading her posts, etc..)
18
12
  # The set of {Permission Permissions} granted are associated with the {Relation} of
19
13
  # the {Tie}.
20
14
  #
21
- # Usually, stronger ties (and relations) have more permissions than weaker ones.
22
- #
23
15
  # = Scopes
24
16
  # There are several scopes defined:
25
17
  #
@@ -28,6 +20,7 @@
28
20
  # sent_or_received_by(actor):: the union of the former
29
21
  # related_by(relation):: ties with this relation. Accepts relation, relation_name,
30
22
  # integer, array
23
+ #
31
24
  class Tie < ActiveRecord::Base
32
25
 
33
26
  belongs_to :contact, :counter_cache => true
@@ -9,6 +9,14 @@
9
9
  newel: false,
10
10
  height: 6
11
11
  });
12
+ $("#group_actor_tag_list").fcbkcomplete({
13
+ json_url: "<%= tags_path(:format => :json) %>",
14
+ cache: false,
15
+ filter_case: true,
16
+ filter_hide: true,
17
+ newel: false,
18
+ height: 6
19
+ });
12
20
  <% end %>
13
21
 
14
22
  <%= location(
@@ -52,6 +60,16 @@
52
60
  <%= f.select :_participants, [], :class => "form_tag" %>
53
61
  </div>
54
62
  </div>
63
+ <div class="form_row">
64
+ <div class="form_label" id="form_tags">
65
+ <%= f.label t('group.tags')%>
66
+ </div>
67
+ <div class="form_field">
68
+ <%= f.fields_for :actor do |actor_form| %>
69
+ <%= actor_form.select :tag_list, [], :class => "form_tag" %>
70
+ <%end%>
71
+ </div>
72
+ </div>
55
73
  <div class="form_row form_label">
56
74
  <%= f.label :description %>
57
75
  </div>
@@ -6,6 +6,7 @@
6
6
  <title><%= yield(:title).empty? ? t('site.name') : yield(:title)%></title>
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
+ <meta name="generator" content="SocialStream" />
9
10
 
10
11
  <%= stylesheet_link_tag "application" %>
11
12
  <%= javascript_include_tag "application" %>
@@ -166,6 +166,16 @@ end %>
166
166
  <%= f.text_field :address, :class => "form_tag" %>
167
167
  </div>
168
168
  </div>
169
+ <%= f.fields_for :actor do |actor_form| %>
170
+ <div class="form_row">
171
+ <div class="form_label">
172
+ <%= actor_form.label t('profile.email')%>
173
+ </div>
174
+ <div class="form_field">
175
+ <%= actor_form.text_field :email, :class => "email form_tag" %>
176
+ </div>
177
+ </div>
178
+ <%end%>
169
179
  <div class="form_row">
170
180
  <div class="form_label">
171
181
  <%= f.label t('profile.website')%>
@@ -1,5 +1,5 @@
1
1
  module SocialStream
2
2
  module Base
3
- VERSION = "0.10.7".freeze
3
+ VERSION = "0.10.8".freeze
4
4
  end
5
5
  end
@@ -2,15 +2,11 @@ require 'active_support/concern'
2
2
 
3
3
  module SocialStream
4
4
  module Models
5
- # {Subject Subjects} are subtypes of {Actor}. {SocialStream} provides two
5
+ # {Subject Subjects} are subtypes of {Actor Actors}. {SocialStream Social Stream} provides two
6
6
  # {Subject Subjects}, {User} and {Group}
7
7
  #
8
- # Each {Subject} is defined in +config/initializers/social_stream.rb+
9
- #
10
- # This module provides additional features for models that are subjects,
11
- # extending them. Including the module in each {Subject} model is not required!
12
- # After declared in +config/initializers/social_stream.rb+, {SocialStream} is
13
- # responsible for adding subject features to each model.
8
+ # Each {Subject} must defined in +config/initializers/social_stream.rb+ in order to be
9
+ # included in the application.
14
10
  #
15
11
  # = Scopes
16
12
  # There are several scopes available for subjects
@@ -1,3 +1,3 @@
1
1
  module SocialStream
2
- VERSION = "0.15.4".freeze
2
+ VERSION = "0.15.5".freeze
3
3
  end
@@ -15,6 +15,14 @@
15
15
  margin: auto;
16
16
  margin-top: 50px;
17
17
  }
18
+ #link_preview img.link_error{
19
+ margin: auto;
20
+ margin-top: 40px;
21
+ }
22
+ #link_preview div.link_error{
23
+ margin: auto;
24
+ margin-top: 5px;
25
+ }
18
26
  .link {
19
27
  position: relative;
20
28
  padding: 10px;
@@ -2,14 +2,19 @@ class LinkserController < ApplicationController
2
2
  def index
3
3
  if params[:url].present?
4
4
  url = params[:url]
5
- o = Linkser.parse url, {:max_images => 1}
6
- if o.is_a? Linkser::Objects::HTML
7
- link = Link.new
8
- link.fill o
9
- render :partial => "links/link_preview", :locals => {:link => link}
10
- return
5
+ begin
6
+ o = Linkser.parse url, {:max_images => 1}
7
+ if o.is_a? Linkser::Objects::HTML
8
+ link = Link.new
9
+ link.fill o
10
+ render :partial => "links/link_preview", :locals => {:link => link}
11
+ return
12
+ end
13
+ rescue
14
+ render :partial => "links/error", :locals => {:message => I18n.t("link.errors.loading") + " " + url.to_s}
15
+ return
11
16
  end
12
17
  end
13
- render :text => I18n.t("link.errors.only_web")
18
+ render :partial => "links/error", :locals => {:message => I18n.t("link.errors.only_webs")}
14
19
  end
15
20
  end
@@ -32,9 +32,12 @@ class Link < ActiveRecord::Base
32
32
 
33
33
  def check_loaded
34
34
  if !self.loaded.eql? "true" and self.title.nil? and self.description.nil? and self.image.nil?
35
- o = Linkser.parse self.url, {:max_images => 1}
36
- if o.is_a? Linkser::Objects::HTML
37
- self.fill o
35
+ begin
36
+ o = Linkser.parse self.url, {:max_images => 1}
37
+ if o.is_a? Linkser::Objects::HTML
38
+ self.fill o
39
+ end
40
+ rescue
38
41
  end
39
42
  end
40
43
  end
@@ -0,0 +1,4 @@
1
+ <%= image_tag "btn/error.png", :class => "link_error" %>
2
+ <div class="link_error">
3
+ <%= message %>
4
+ </div>
@@ -1,5 +1,5 @@
1
1
  module SocialStream
2
2
  module Linkser
3
- VERSION = "0.0.4".freeze
3
+ VERSION = "0.0.5".freeze
4
4
  end
5
5
  end
@@ -12,7 +12,7 @@ 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.7')
15
+ s.add_runtime_dependency('social_stream-base', '~> 0.10.8')
16
16
  s.add_runtime_dependency('linkser', '~> 0.0.7')
17
17
  # Development Gem dependencies
18
18
  s.add_development_dependency('sqlite3-ruby')
data/presence/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ rsa_keys/*
@@ -1,5 +1,7 @@
1
1
  class XmppController < ApplicationController
2
2
 
3
+ before_filter :authorization, :only => [:setConnection, :unsetConecction, :setPresence, :unsetPresence, :resetConnection, :synchronizePresence ]
4
+
3
5
  #Mapping XMPP Standar Status to Social Stream Chat Status
4
6
  STATUS = {
5
7
  '' => 'available',
@@ -10,14 +12,12 @@ class XmppController < ApplicationController
10
12
  }
11
13
 
12
14
 
13
- #API METHODS
15
+ ##############################
16
+ ########## REST API ##########
17
+ ##############################
14
18
 
15
- def setConnection
16
- unless authorization
17
- render :text => "Authorization error"
18
- return
19
- end
20
-
19
+ def setConnection
20
+ params = @dparams
21
21
  user = User.find_by_slug(params[:name])
22
22
 
23
23
  if user && !user.connected
@@ -28,16 +28,12 @@ class XmppController < ApplicationController
28
28
  return
29
29
  end
30
30
 
31
- render :text => "Error"
31
+ render :text => "Ok: The user was already connected"
32
32
  end
33
33
 
34
34
 
35
35
  def unsetConecction
36
- unless authorization
37
- render :text => "Authorization error"
38
- return
39
- end
40
-
36
+ params = @dparams
41
37
  user = User.find_by_slug(params[:name])
42
38
 
43
39
  if user && user.connected
@@ -47,16 +43,12 @@ class XmppController < ApplicationController
47
43
  return
48
44
  end
49
45
 
50
- render :text => "User not connected"
46
+ render :text => "Ok: The user was already disconnected"
51
47
  end
52
48
 
53
49
 
54
- def setPresence
55
- unless authorization
56
- render :text => "Authorization error"
57
- return
58
- end
59
-
50
+ def setPresence
51
+ params = @dparams
60
52
  user = User.find_by_slug(params[:name])
61
53
  status = params[:status]
62
54
 
@@ -65,20 +57,16 @@ class XmppController < ApplicationController
65
57
  user.connected = true
66
58
  user.save!
67
59
  end
68
- render :text => 'Status changed'
60
+ render :text => "Ok: Status changed"
69
61
  else
70
- render :text => 'Status not changed'
62
+ render :text => "Ok: Status not changed"
71
63
  end
72
64
 
73
65
  end
74
66
 
75
67
 
76
- def unsetPresence
77
- unless authorization
78
- render :text => "Authorization error"
79
- return
80
- end
81
-
68
+ def unsetPresence
69
+ params = @dparams
82
70
  user = User.find_by_slug(params[:name])
83
71
 
84
72
  if user && user.connected
@@ -88,44 +76,36 @@ class XmppController < ApplicationController
88
76
  return
89
77
  end
90
78
 
91
- render :text => "User not connected"
79
+ render :text => "Ok: The user was already disconnected"
92
80
  end
93
81
 
94
82
 
95
83
  def resetConnection
96
- unless authorization
97
- render :text => "Authorization error"
98
- return
99
- end
100
-
101
84
  SocialStream::Presence::XmppServerOrder::resetPresence
102
-
103
85
  render :text => "Ok"
104
86
  end
105
87
 
106
88
 
107
- def synchronizePresence
108
- unless authorization
109
- render :text => "Authorization error"
89
+ def synchronizePresence
90
+ params = @dparams
91
+
92
+ #Work without encrypted params
93
+ if params[:name] == nil or params[:name].empty? or params[:name]==""
94
+ render :text => "Ok: No users received"
110
95
  return
111
- end
112
-
113
- #Actual connected users
114
- user_slugs = params[:name]
96
+ end
115
97
 
98
+ #Actual connected users
99
+ user_slugs = params[:name].split(",")
116
100
  SocialStream::Presence::XmppServerOrder::synchronizePresenceForSlugs(user_slugs)
117
-
118
- render :text => "ok"
119
- end
120
-
121
-
122
- def authorization
123
- return params[:password] == SocialStream::Presence.xmpp_server_password
101
+ render :text => "Ok"
124
102
  end
125
103
 
126
104
 
127
- def chatWindow
128
-
105
+
106
+ #OPEN METHODS
107
+
108
+ def chatWindow
129
109
  if current_user and current_user.chat_enabled and (params[:userConnected]=="true")
130
110
  render :partial => 'chat/contacts'
131
111
  elsif current_user and current_user.chat_enabled
@@ -183,7 +163,7 @@ class XmppController < ApplicationController
183
163
  private
184
164
 
185
165
  def setStatus(user,status)
186
- if user and status and user.status != status and validStatus(status)
166
+ if user and status and validStatus(status) and user.status != STATUS[status]
187
167
  user.status = STATUS[status]
188
168
  user.save!
189
169
  return true
@@ -195,4 +175,13 @@ class XmppController < ApplicationController
195
175
  return STATUS.keys.include?(status)
196
176
  end
197
177
 
178
+
179
+ #Authorization to use REST API
180
+ def authorization
181
+ unless SocialStream::Presence::XmppServerOrder::authorization(params)
182
+ render :text => "Authorization error"
183
+ end
184
+ @dparams = SocialStream::Presence::XmppServerOrder::decryptParams(params)
185
+ end
186
+
198
187
  end