social_stream 0.15.4 → 0.15.5

Sign up to get free protection for your applications and to get access to all the features.
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