social_stream 0.13.3 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. data/base/app/assets/javascripts/activities.js.erb +0 -2
  2. data/base/app/views/objects/_new_activity.html.erb +1 -1
  3. data/base/lib/social_stream/base/version.rb +1 -1
  4. data/lib/generators/social_stream/install_generator.rb +1 -0
  5. data/lib/social_stream.rb +2 -0
  6. data/lib/social_stream/version.rb +1 -1
  7. data/linkser/app/assets/stylesheets/linkser.css.scss +40 -0
  8. data/linkser/app/controllers/links_controller.rb +3 -0
  9. data/linkser/app/controllers/linkser_controller.rb +22 -0
  10. data/linkser/app/models/link.rb +34 -0
  11. data/linkser/app/views/links/_link.html.erb +24 -0
  12. data/linkser/app/views/links/_link_preview.html.erb +25 -0
  13. data/linkser/app/views/links/_link_with_details.html.erb +4 -0
  14. data/linkser/app/views/links/create.js.erb +15 -0
  15. data/linkser/app/views/links/destroy.js.erb +1 -0
  16. data/linkser/app/views/links/show.html.erb +10 -0
  17. data/linkser/app/views/posts/_new_activity_fields.erb +53 -0
  18. data/linkser/config/locales/en.yml +11 -0
  19. data/linkser/config/locales/es.yml +12 -1
  20. data/linkser/config/routes.rb +2 -2
  21. data/linkser/db/migrate/20111129100618_create_social_stream_linkser.rb +21 -0
  22. data/linkser/lib/social_stream-linkser.rb +7 -0
  23. data/linkser/social_stream-linkser.gemspec +2 -2
  24. data/presence/app/views/xmpp/active_users.html.erb +1 -1
  25. data/presence/config/routes.rb +3 -3
  26. data/presence/ejabberd/conf/ssconfig_example.cfg +14 -20
  27. data/presence/ejabberd/ejabberd_files.zip +0 -0
  28. data/presence/ejabberd/ejabberd_scripts/authentication_script +3 -13
  29. data/presence/ejabberd/ejabberd_scripts/development_scripts/show_config.sh +13 -9
  30. data/presence/ejabberd/ejabberd_scripts/emanagement +65 -22
  31. data/presence/ejabberd/ejabberd_scripts/reset_connection_script +1 -1
  32. data/presence/ejabberd/ejabberd_scripts/set_connection_script +1 -1
  33. data/presence/ejabberd/ejabberd_scripts/set_presence_script +1 -1
  34. data/presence/ejabberd/ejabberd_scripts/synchronize_presence_script +4 -2
  35. data/presence/ejabberd/ejabberd_scripts/unset_connection_script +1 -1
  36. data/presence/ejabberd/ejabberd_scripts/unset_presence_script +48 -0
  37. data/presence/ejabberd/mod_sspresence/mod_sspresence.beam +0 -0
  38. data/presence/ejabberd/mod_sspresence/mod_sspresence.erl +4 -0
  39. data/presence/lib/social_stream/presence/models/buddy_manager.rb +1 -1
  40. data/presence/lib/social_stream/presence/version.rb +1 -1
  41. data/presence/lib/social_stream/presence/xmpp_server_order.rb +9 -24
  42. data/social_stream.gemspec +2 -1
  43. data/spec/dummy/db/schema.rb +1 -0
  44. data/spec/support/db.rb +13 -8
  45. metadata +51 -22
@@ -32,14 +32,12 @@ $(function() {
32
32
  });
33
33
 
34
34
  $('#securities .search-choice a').click(function(){
35
- console.log($('#security').children("option:selected").size());
36
35
  if($('#security').children("option:selected").size()==0){
37
36
  $('#securities input').css('width', default_security_width)
38
37
  }
39
38
  });
40
39
  });
41
40
  $('#securities input').blur(function(){
42
- console.log($('#security').children("option:selected").size());
43
41
  if($('#security').children("option:selected").size()==0){
44
42
  $('#securities input').css('width', default_security_width)
45
43
  }
@@ -4,5 +4,5 @@
4
4
  <%= form_for object, :remote => remote do |f| %>
5
5
  <%= f.hidden_field :owner_id %>
6
6
 
7
- <%= render :partial => object.class.to_s.tableize+'/new_activity_fields' , :locals => {:f => f} %>
7
+ <%= render :partial => object.class.to_s.tableize+'/new_activity_fields' , :locals => {:f => f, :receiver => receiver} %>
8
8
  <% end %>
@@ -1,5 +1,5 @@
1
1
  module SocialStream
2
2
  module Base
3
- VERSION = "0.10.3".freeze
3
+ VERSION = "0.10.4".freeze
4
4
  end
5
5
  end
@@ -2,4 +2,5 @@ class SocialStream::InstallGenerator < Rails::Generators::Base #:nodoc:
2
2
  hook_for :base
3
3
  hook_for :documents
4
4
  hook_for :events
5
+ hook_for :linkser
5
6
  end
data/lib/social_stream.rb CHANGED
@@ -1,11 +1,13 @@
1
1
  require 'social_stream-base'
2
2
  require 'social_stream-documents'
3
3
  require 'social_stream-events'
4
+ require 'social_stream-linkser'
4
5
 
5
6
  module SocialStream
6
7
  class Engine < ::Rails::Engine #:nodoc:
7
8
  config.app_generators.base 'social_stream:base'
8
9
  config.app_generators.documents 'social_stream:documents'
9
10
  config.app_generators.events 'social_stream:events'
11
+ config.app_generators.linkser 'social_stream:linkser'
10
12
  end
11
13
  end
@@ -1,3 +1,3 @@
1
1
  module SocialStream
2
- VERSION = "0.13.3".freeze
2
+ VERSION = "0.14.0".freeze
3
3
  end
@@ -1 +1,41 @@
1
1
  @import "colors";
2
+
3
+ #link_preview {
4
+ width: 510px;
5
+ height: 120px;
6
+ border: 1px solid $auxiliar-color;
7
+ margin: 5px auto;
8
+ }
9
+
10
+ #link_preview img.loading{
11
+ margin: auto;
12
+ margin-top: 40px;
13
+ }
14
+ .link {
15
+ position: relative;
16
+ padding: 10px;
17
+ }
18
+ .link .thumbnail, .link .thumbnail img{
19
+ float: left;
20
+ max-height: 100px;
21
+ max-width: 120px;
22
+ margin-right:10px;
23
+ }
24
+ .link .info{
25
+ float: left;
26
+ width: 360px;
27
+ text-align: left;
28
+ }
29
+ .activity_objects .link .info{
30
+ width: 320px;
31
+ }
32
+ .link .info .title{
33
+ font-weight: bold;
34
+ margin-bottom: 3px;
35
+ }
36
+ .link .info .url{
37
+ text-decoration: underline;
38
+ margin-bottom: 5px;
39
+ }
40
+ .link .info .description{
41
+ }
@@ -0,0 +1,3 @@
1
+ class LinksController < ApplicationController
2
+ include SocialStream::Controllers::Objects
3
+ end
@@ -0,0 +1,22 @@
1
+ class LinkserController < ApplicationController
2
+ def index
3
+ if params[:url].present?
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.title = o.title if o.title
9
+ link.description = o.description if o.description
10
+ link.url = o.last_url
11
+ if o.ogp and o.ogp.image
12
+ link.image = o.ogp.image
13
+ elsif o.images and o.images.first
14
+ link.image = o.images.first.url
15
+ end
16
+ render :partial => "links/link_preview", :locals => {:link => link}
17
+ return
18
+ end
19
+ end
20
+ render :text => I18n.t("link.errors.only_web")
21
+ end
22
+ end
@@ -0,0 +1,34 @@
1
+ class Link < ActiveRecord::Base
2
+ include SocialStream::Models::Object
3
+
4
+ validates_presence_of :url
5
+
6
+ attr_accessor :loaded
7
+
8
+ before_create :check_loaded
9
+
10
+ define_index do
11
+ indexes title
12
+ indexes description
13
+ indexes url
14
+
15
+ has created_at
16
+ end
17
+
18
+ def check_loaded
19
+ if !self.loaded.eql?"true" and self.title.nil? and self.description.nil? and self.image.nil?
20
+ o = Linkser.parse self.url, {:max_images => 1}
21
+ if o.is_a? Linkser::Objects::HTML
22
+ self.title = o.title if o.title
23
+ self.description = o.description if o.description
24
+ self.url = o.last_url
25
+ if o.ogp and o.ogp.image
26
+ self.image = o.ogp.image
27
+ elsif o.images and o.images.first
28
+ self.image = o.images.first.url
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ end
@@ -0,0 +1,24 @@
1
+ <%= div_for link, :class => 'content_size' do %>
2
+ <% if link.image %>
3
+ <div class="thumbnail">
4
+ <%= link_to image_tag(link.image),link.url %>
5
+ </div>
6
+ <% end %>
7
+ <div class="info">
8
+ <% if link.title %>
9
+ <div class="title">
10
+ <%= link.title %>
11
+ </div>
12
+ <% end %>
13
+ <div class="url">
14
+ <%= auto_link(link.url) %>
15
+ </div>
16
+ <% if link.description %>
17
+ <div class="description">
18
+ <%= auto_link(link.description) %>
19
+ </div>
20
+ <% end %>
21
+ </div>
22
+ <% end %>
23
+
24
+ <br class="clearfloat">
@@ -0,0 +1,25 @@
1
+ <%= div_for link, :class => 'content_size' do %>
2
+ <% if link.image %>
3
+ <div class="thumbnail">
4
+ <%= image_tag(link.image)%>
5
+ <%= hidden_field_tag "link[image]", link.image %>
6
+ </div>
7
+ <% end %>
8
+ <div class="info">
9
+ <% if link.title %>
10
+ <div class="title">
11
+ <%= link.title %>
12
+ <%= hidden_field_tag "link[title]", link.title %>
13
+ </div>
14
+ <% end %>
15
+ <div class="url">
16
+ <%= auto_link(link.url) %>
17
+ </div>
18
+ <% if link.description %>
19
+ <div class="description">
20
+ <%= auto_link(link.description) %>
21
+ <%= hidden_field_tag "link[description]", link.description %>
22
+ </div>
23
+ <% end %>
24
+ </div>
25
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <%= div_for link, :class => 'content_size' do %>
2
+ <%= simple_format link.title %>
3
+ <% end %>
4
+
@@ -0,0 +1,15 @@
1
+ //Display the new post
2
+ $("#wall").prepend("<%= escape_javascript(render @link.post_activity) %>");
3
+
4
+ setActivityPrivacyTooltips("<%= escape_javascript dom_id(@link.post_activity) %>");
5
+
6
+ unblock_all_forms();
7
+
8
+ $("#link_preview").hide();
9
+ $("#link_preview").html("");
10
+ $("#link_loaded").val(false);
11
+ $("#link_preview").html("");
12
+ $("#link_url").val("");
13
+
14
+
15
+
@@ -0,0 +1 @@
1
+ <%=render(:partial => 'objects/destroy') %>
@@ -0,0 +1,10 @@
1
+ <% content_for :javascript do %>
2
+ var message_hash = window.location.hash.match(/^.*activity_(\d+).*$/);
3
+ if (message_hash && message_hash > 0){
4
+ $.scrollTo('#activity_' + message_hash[1] ,1500,{axis:'y'});
5
+ }
6
+ <% end %>
7
+
8
+ <%= render :partial => 'objects/show',
9
+ :locals => { :object => @link } %>
10
+
@@ -0,0 +1,53 @@
1
+ <%= f.text_field :text, :id => "input_activities", :size => 85 %>
2
+ <%= hidden_field_tag "link[owner_id]", Actor.normalize_id(receiver) %>
3
+ <%= hidden_field_tag "link[url]" %>
4
+ <%= hidden_field_tag "link[loaded]", false %>
5
+ <div id="link_preview" style="display:none;"></div>
6
+
7
+ <%= javascript_tag do %>
8
+ $(function() {
9
+ $.preloadImages ("assets/loading.gif");
10
+ $("#input_activities").Watermark("<%= I18n.t('post.input') %>","#666");
11
+
12
+ var urlDetect = function(){
13
+ this.currentValue = $("#input_activities").val();
14
+ if(this.lastValue==null) this.lastValue = "";
15
+
16
+ var regexp = /(http|ftp|https):\/\/[\w-]+(\.[\w-]+)+([\w.,@?^=%&amp;:\/~+#-]*[\w@?^=%&amp;\/~+#-])?/
17
+ if(regexp.test($("#input_activities").val())){
18
+ $("#link_url").val($("#input_activities").val());
19
+ $("#link_loaded").val(false);
20
+ $("#new_post").attr("action","<%= links_path %>");
21
+ if(this.currentValue!=this.lastValue){
22
+ $("#link_preview").html("<%= escape_javascript(image_tag('loading.gif', :class => :loading)) %>");
23
+ this.lastValue = this.currentValue;
24
+ var url = this.currentValue;
25
+ var urlDetect = this;
26
+ $.ajax({
27
+ type : "GET",
28
+ url : "<%= linkser_parse_url %>?url=" + url,
29
+ success : function(html) {
30
+ console.log("Peticion guay a " + url);
31
+ if ($("#input_activities").val()==url){ //Only show if input value is still the same
32
+ $("#link_preview").html(html);
33
+ $("#link_loaded").val(true);
34
+ }
35
+ },
36
+ error: function (xhr, ajaxOptions, thrownError){
37
+ $("#link_preview").html("<span class=\"loading\"><%= escape_javascript(t("link.errors.loading"))%> " + url + "</span>");
38
+ }
39
+ });
40
+ }
41
+ $("#link_preview").show();
42
+ }else{
43
+ $("#new_post").attr("action","<%= posts_path %>");
44
+ $("#link_preview").hide();
45
+ $("#link_preview").html("");
46
+ $("#link_url").val("");
47
+ }
48
+ }
49
+ $("#input_activities").change(urlDetect).keyup(urlDetect);
50
+
51
+ });
52
+
53
+ <% end %>
@@ -1,3 +1,14 @@
1
1
  en:
2
2
  linkser:
3
3
  title: "Linkser"
4
+ link:
5
+ confirm_delete: "Delete link?"
6
+ errors:
7
+ loading: "Error loading"
8
+ only_webs: "Only webpages are supported"
9
+ form:
10
+ title: "Link"
11
+ input: "Write the web address"
12
+ name: "link"
13
+ one: "a link"
14
+ title: "Links"
@@ -1,3 +1,14 @@
1
1
  es:
2
2
  linkser:
3
- title: "Linkser"
3
+ title: "Linkser"
4
+ link:
5
+ confirm_delete: "¿Borrar enlace?"
6
+ errors:
7
+ loading: "Error cargando"
8
+ only_webs: "Solo puedes compartir págnas web"
9
+ form:
10
+ title: "Enlace"
11
+ input: "Escribe una dirección"
12
+ name: "enlace"
13
+ one: "una enlace"
14
+ title: "Enlaces"
@@ -1,3 +1,3 @@
1
- Rails.application.routes.draw do
2
-
1
+ Rails.application.routes.draw do
2
+ match 'linkser_parse' => 'linkser#index', :as => :linkser_parse
3
3
  end
@@ -0,0 +1,21 @@
1
+ class CreateSocialStreamLinkser < ActiveRecord::Migration
2
+ def self.up
3
+ create_table "links", :force => true do |t|
4
+ t.integer "activity_object_id"
5
+ t.datetime "created_at"
6
+ t.datetime "updated_at"
7
+ t.string "url"
8
+ t.string "callback_url"
9
+ t.string "title"
10
+ t.string "image"
11
+ t.text "description"
12
+ end
13
+
14
+ add_index "links", "activity_object_id"
15
+ end
16
+
17
+ def self.down
18
+ remove_foreign_key "links", :name => "links_on_activity_object_id"
19
+ drop_table :links
20
+ end
21
+ end
@@ -1,7 +1,14 @@
1
1
  require 'social_stream-base'
2
+ require 'linkser'
2
3
 
3
4
  module SocialStream
4
5
  module Linkser
6
+ # Add :link to SocialStream.objects and SocialStream.activity_forms by default
7
+ # It can be configured by users at application's config/initializers/social_stream.rb
8
+ #%w(objects activity_forms).each do |m|
9
+ %w(objects).each do |m|
10
+ SocialStream.__send__(m).push(:link) unless SocialStream.__send__(m).include?(:link)
11
+ end
5
12
 
6
13
  end
7
14
  end
@@ -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.9.31')
16
- s.add_runtime_dependency('linkser', '~> 0.0.4')
15
+ s.add_runtime_dependency('social_stream-base', '~> 0.10.1')
16
+ s.add_runtime_dependency('linkser', '~> 0.0.6')
17
17
  # Development Gem dependencies
18
18
  s.add_development_dependency('sqlite3-ruby')
19
19
  if RUBY_VERSION < '1.9'
@@ -11,7 +11,7 @@
11
11
  <p>&nbsp;</p>
12
12
  <ul>
13
13
  <%@users.each do |user| %>
14
- <li><b><%=user.name%></b></li>
14
+ <li><b><%=user.name%></b> (<%=user.status%>) </li>
15
15
  <%end%>
16
16
  </ul>
17
17
  <p>&nbsp;</p>
@@ -1,13 +1,13 @@
1
1
  Rails.application.routes.draw do
2
2
  #match "/active_users" => "Xmpp#active_users"
3
3
 
4
- match '/xmpp/resetConnection' => "Xmpp#resetConnection"
5
4
  match '/xmpp/setConnection' => "Xmpp#setConnection"
6
5
  match '/xmpp/unsetConnection' => "Xmpp#unsetConecction"
7
- match '/xmpp/synchronizePresence' => "Xmpp#synchronizePresence"
8
6
  match '/xmpp/setPresence' => "Xmpp#setPresence"
9
7
  match '/xmpp/unsetPresence' => "Xmpp#unsetPresence"
10
- match '/chatWindow'=> "Xmpp#chatWindow"
8
+ match '/xmpp/resetConnection' => "Xmpp#resetConnection"
9
+ match '/xmpp/synchronizePresence' => "Xmpp#synchronizePresence"
11
10
  match '/xmpp/updateSettings'=> "Xmpp#updateSettings"
11
+ match '/chatWindow'=> "Xmpp#chatWindow"
12
12
 
13
13
  end
@@ -1,38 +1,32 @@
1
- #Social Stream Presence: ejabberd config
1
+ #Social Stream Presence: Ejabberd configuration file
2
2
 
3
3
  #Ejabberd node server domain
4
- server_domain=domain.example.com
4
+ server_domain=xmppdomain.example.com
5
5
 
6
6
  #Scripts Path
7
7
  scripts_path=/my_scripts_path
8
8
 
9
- #Source path: uncomment to compile ejabberd social stream module
10
- #source_path=/.../ejabberd_source/src
11
-
12
9
  #It is also necessary to modify the file: /etc/ejabberd/ejabberd.cfg
13
10
  #%%{auth_method, external}.
14
11
  #%%{extauth_program, "scripts_path/authentication_script"}.
15
12
 
16
- #API REST
17
- auth_api=http://localhost/users/sign_in
18
- auth_by_cookie_api=http://localhost/api/me
19
- cookie_name=_rails_server_cookie
20
- set_connection_api=http://localhost/xmpp/setConnection
21
- unset_connection_api=http://localhost/xmpp/unsetConnection
22
- reset_connection_api=http://localhost/xmpp/resetConnection
23
- synchronize_presence_api=http://localhost/xmpp/synchronizePresence
24
- set_presence_api=http://localhost/xmpp/setPresence
25
- unset_presence_api=http://localhost/xmpp/unsetPresence
13
+ #Source path: uncomment to compile ejabberd social stream module
14
+ #source_path=/.../ejabberd_source/src
15
+
26
16
 
27
- #Social Stream Login
28
- ss_login=social_stream-presence
17
+ #Web Domain for REST API
18
+ web_domain=ssdomain.example.com
19
+
20
+ #Rails Web Server Cookie name
21
+ #Check this line in your app/config/initializers/session_store.rb: Global::Application.config.session_store :cookie_store, :key => '_rails_server_cookie'
22
+ cookie_name=_rails_server_cookie
29
23
 
30
- #Social Stream PASSWORD
31
- ss_password=password
32
24
 
33
25
  #Ejabberd Server Password
34
26
  ejabberd_password=password
35
27
 
28
+
36
29
  #Emanagement configuration
37
- users_require_sudo=user1,user2,...
30
+ ejabberd_server_user=ejabberd
31
+ users_require_sudo=all
38
32
  verbose=false
@@ -31,11 +31,9 @@ def getOption(option)
31
31
  return "Undefined"
32
32
  end
33
33
 
34
- $accessUrl = getOption("auth_api=")
35
- $accessByCookieUrl = getOption("auth_by_cookie_api=")
34
+ $accessByPasswordUrl = "http://" + getOption("web_domain=") + "/users/sign_in"
35
+ $accessByCookieUrl = "http://" + getOption("web_domain=") + "/api/me"
36
36
  $cookie_name = getOption("cookie_name=")
37
- $sslogin = getOption("ss_login=")
38
- $sspass = getOption("ss_password=")
39
37
 
40
38
 
41
39
  def auth(username, password)
@@ -48,17 +46,9 @@ def auth(username, password)
48
46
  # return true
49
47
  #end
50
48
 
51
- #Social Stream password
52
- if username == $sslogin
53
- if password == $sspass
54
- return true
55
- else
56
- return false
57
- end
58
- end
59
49
 
60
50
  begin
61
- response = RestClient.post $accessUrl, :user => { :email => username , :password => password }
51
+ response = RestClient.post $accessByPasswordUrl, :user => { :email => username , :password => password }
62
52
 
63
53
  if response.code == 201
64
54
  return true
@@ -17,17 +17,21 @@ end
17
17
  puts ""
18
18
  puts "############### Ejabberd Configuration ###############"
19
19
  puts "Config file for Social Stream Presence: /etc/ejabberd/ssconfig.cfg"
20
+ puts "Xmpp Server domain: #{getOption("server_domain=")}"
20
21
  puts "Scripts Path: #{getOption("scripts_path=")}"
21
22
  puts "mod_sspresence Path: #{getOption("source_path=")}"
22
- puts "Server domain: #{getOption("server_domain=")}"
23
- puts "API REST URLs"
24
- puts "Authentication: #{getOption("auth_api=")}"
25
- puts "onRegisterConnection: #{getOption("set_connection_api=")}"
26
- puts "onRemoveConnection: #{getOption("unset_connection_api=")}"
27
- puts "onPresence: #{getOption("set_presence_api=")}"
28
- puts "onUnsetPresence: #{getOption("unset_presence_api=")}"
29
- puts "ResetConnection: #{getOption("reset_connection_api=")}"
30
- puts "SynchronizePresence: #{getOption("synchronize_presence_api=")}"
23
+ puts "Web Domain for REST API: #{getOption("web_domain=")}"
24
+ puts "##############################"
25
+ puts "REST API"
26
+ puts "Authentication by password: http://#{getOption("web_domain=")}/users/sign_in"
27
+ puts "Authentication by cookie: http://#{getOption("web_domain=")}/api/me"
28
+ puts "onRegisterConnection: http://#{getOption("web_domain=")}/xmpp/setConnection"
29
+ puts "onRemoveConnection: http://#{getOption("web_domain=")}/xmpp/unsetConnection"
30
+ puts "onPresence: http://#{getOption("web_domain=")}/xmpp/setPresence"
31
+ puts "onUnsetPresence: http://#{getOption("web_domain=")}/xmpp/unsetPresence"
32
+ puts "ResetConnection: http://#{getOption("web_domain=")}/xmpp/resetConnection"
33
+ puts "SynchronizePresence: http://#{getOption("web_domain=")}/xmpp/synchronizePresence"
34
+ puts "##############################"
31
35
  puts "Social Stream Presence logs in var/log/ejabberd/"
32
36
  puts "######################################################"
33
37
  puts ""
@@ -31,6 +31,8 @@ end
31
31
  #Configuration variables
32
32
  $domain = getOption("server_domain=")
33
33
  $verbose = (getOption("verbose=")=="true")
34
+ $ejabberd_user = getOption("ejabberd_server_user=")
35
+ $checkEjabberdctlQuotedString = false
34
36
 
35
37
 
36
38
  PARAMS_FOR_COMMANDS = {
@@ -41,9 +43,7 @@ PARAMS_FOR_COMMANDS = {
41
43
  'getRoster' => 1,
42
44
  'removeRoster' => 1,
43
45
  'removeAllRosters' => 0,
44
- 'getBuddysFromRoster' => 1,
45
46
  'getAllUsersWithRoster' => 0,
46
- 'getAllRosters' => 0,
47
47
  'printAllRosters' => 0,
48
48
  'printAllBidirecctionalBuddys' => 0,
49
49
  'checkUser' => 1,
@@ -54,7 +54,9 @@ PARAMS_FOR_COMMANDS = {
54
54
  'sendMessageToUser' => 3,
55
55
  'getUserResource' => 1,
56
56
  'isEjabberdNodeStarted' => 0,
57
+ 'broadcast' => 2,
57
58
  'checkEjabberdctlQuotedString' => 0,
59
+ 'getConnectedUsers' => 0,
58
60
  'help' => 0,
59
61
  }
60
62
 
@@ -66,9 +68,7 @@ SYNTAX_FOR_COMMANDS = {
66
68
  'getRoster' => 'getRoster username',
67
69
  'removeRoster' => 'removeRoster username',
68
70
  'removeAllRosters' => 'removeAllRosters',
69
- 'getBuddysFromRoster' => 'getBuddysFromRoster roster',
70
71
  'getAllUsersWithRoster' => 'getAllUsersWithRoster',
71
- 'getAllRosters' => 'getAllRosters',
72
72
  'printAllRosters' => 'printAllRosters',
73
73
  'printAllBidirecctionalBuddys' => 'printAllBidirecctionalBuddys',
74
74
  'checkUser' => 'checkUser user',
@@ -79,7 +79,9 @@ 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
83
  'checkEjabberdctlQuotedString' => 'checkEjabberdctlQuotedString',
84
+ 'getConnectedUsers' => 'getConnectedUsers',
83
85
  'help' => 'help',
84
86
  }
85
87
 
@@ -285,13 +287,6 @@ end
285
287
 
286
288
  #Manage stanzas Utilities
287
289
 
288
- def sendStanzaUserMessage(username,msg)
289
- resource = getUserResource(username);
290
- stanza = "\\<\\'message\\'\\>\\<\\'body\\'\\>\\'" + msg + "\\'\\<\\'/body\\'\\>\\<\\'/message\\'\\>"
291
- executeCommand("ejabberdctl send_stanza_c2s " + username + " " + $domain + " " + resource + " " + stanza)
292
- return "Done"
293
- end
294
-
295
290
  def setPresence(username)
296
291
  sendPresenceStanzaWithType(username,username,"available")
297
292
  end
@@ -305,12 +300,14 @@ def sendPresence(username,show)
305
300
  end
306
301
 
307
302
  def sendPresenceWithShow(from_name,to_name,show)
308
- puts from_name
303
+ #puts from_name
309
304
  resource = getUserResource(from_name);
310
- puts resource
305
+ #puts resource
311
306
  from_sid = from_name + "@" + $domain;
312
307
  to_sid = to_name + "@" + $domain;
313
- pres_stanza = "\\<\\'presence from=\\'\\\"\\'" + from_sid + "\\'\\\"\\' to=\\'\\\"\\'" + to_sid + "\\'\\\"\\>\\<\\'show\\'\\>\\'" + show + "\\'\\<\\'/show\\'\\>\\<\\'/presence\\'\\>"
308
+ pres_stanza = "\\<" + buildQuotedString("presence from=") + "\\\"" + buildQuotedString(from_sid) + "\\\"" + buildQuotedString(" to=") + "\\\"" +
309
+ buildQuotedString(to_sid) + "\\\"\\>\\<" + buildQuotedString("show") + "\\>" + buildQuotedString(show) + "\\<" +
310
+ buildQuotedString("/show") + "\\>\\<" + buildQuotedString("/presence") + "\\>"
314
311
  executeCommand("ejabberdctl send_stanza_c2s " + from_name + " " + $domain + " " + resource + " " + pres_stanza)
315
312
  return "Done"
316
313
  end
@@ -319,7 +316,8 @@ def sendPresenceStanzaWithType(from_name,to_name,presence_type)
319
316
  resource = getUserResource(from_name);
320
317
  from_sid = from_name + "@" + $domain;
321
318
  to_sid = to_name + "@" + $domain;
322
- pres_stanza = "\\<\\'presence type=\\'\\\"\\'" + presence_type + "\\'\\\"\\' from=\\'\\\"\\'" + from_sid + "\\'\\\"\\' to=\\'\\\"\\'" + to_sid + "\\'\\\"\\>\\<\\'/presence\\'\\>"
319
+ pres_stanza = "\\<" + buildQuotedString("presence type=") + "\\\"" + buildQuotedString(presence_type) + "\\\"" + buildQuotedString(" from=") + "\\\"" +
320
+ buildQuotedString(from_sid) + "\\\"" + buildQuotedString(" to=") + "\\\"" + buildQuotedString(to_sid) + "\\\"\\>\\<" + buildQuotedString("/presence") + "\\>"
323
321
  executeCommand("ejabberdctl send_stanza_c2s " + from_name + " " + $domain + " " + resource + " " + pres_stanza)
324
322
  return "Done"
325
323
  end
@@ -356,17 +354,52 @@ def isEjabberdNodeStarted
356
354
  return false
357
355
  end
358
356
 
357
+ def getConnectedUsers
358
+ users = []
359
+ output = executeCommand("ejabberdctl connected-users")
360
+ sessions = output.split("\n")
361
+ sessions.each do |session|
362
+ users << session.split("@")[0]
363
+ end
364
+ return users
365
+ end
366
+
367
+ def broadcast(users,msg)
368
+ output = executeCommand("ejabberdctl connected-users")
369
+ lines = output.split("\n");
370
+ lines.each do |line|
371
+ username = line.split("@")[0]
372
+ if (users == "all") or (users.length > 1 and users.include?(username))
373
+ s = line.split("@")[1];
374
+ resource = s.split("/")[1];
375
+ sendMessageToUser("SocialStream",username,msg)
376
+ end
377
+ end
378
+ return "Done"
379
+ end
380
+
381
+ #Determine how to scape characters for build quoted strings
359
382
  def checkEjabberdctlQuotedString
360
383
  puts "checkForSimpleSlash: " + checkForSimpleSlash.to_s()
361
384
  puts "checkForDoubleSlash: " + checkForDoubleSlash.to_s()
362
385
  end
363
386
 
387
+ def checkAndSetEjabberdctlQuotedString
388
+ if checkForSimpleSlash
389
+ $checkForSimpleSlash = true
390
+ end
391
+ if checkForDoubleSlash
392
+ $checkForDoubleSlash = true
393
+ end
394
+ $checkEjabberdctlQuotedString = true
395
+ end
396
+
364
397
  def checkForDoubleSlash
365
398
  command = "ejabberdctl send_message_chat example@localhost example@localhost \\'Hello quoted string\\'"
366
399
  if execute_as_sudo
367
400
  command = "sudo " + command
368
401
  end
369
- #puts "Executing " + command
402
+
370
403
  output = %x[#{command}]
371
404
  firstLine = ""
372
405
  lines = output.split("\n")
@@ -414,10 +447,14 @@ def checkForSimpleSlash
414
447
  end
415
448
 
416
449
  def buildQuotedString(msg)
417
- if checkForSimpleSlash
450
+ if !$checkEjabberdctlQuotedString
451
+ checkAndSetEjabberdctlQuotedString
452
+ end
453
+
454
+ if $checkForSimpleSlash
418
455
  return "\'" + msg + "\'"
419
456
  end
420
- if checkForDoubleSlash
457
+ if $checkForDoubleSlash
421
458
  return "\\'" + msg + "\\'"
422
459
  end
423
460
  return msg
@@ -431,7 +468,8 @@ def executeCommand(command)
431
468
  command = buildCommand(command)
432
469
 
433
470
  if $verbose
434
- puts "Executing: " + command
471
+ #Logging...
472
+ #puts "Executing: " + command
435
473
  ejabberdLog("Executing (#{command})")
436
474
  end
437
475
 
@@ -442,15 +480,20 @@ end
442
480
 
443
481
  def buildCommand(command)
444
482
  if execute_as_sudo
445
- command = "sudo -u ejabberd " + command
483
+ command = "sudo -u " + $ejabberd_user + " " + command
446
484
  end
447
485
  return command
448
486
  end
449
487
 
450
488
  def execute_as_sudo
451
- current_user = %x["whoami"].split("\n")[0]
452
489
  sudo_users = getOption("users_require_sudo=")
490
+
491
+ if sudo_users=="all"
492
+ return true
493
+ end
494
+
453
495
  sudo_users_array = sudo_users.split(",")
496
+ current_user = %x["whoami"].split("\n")[0]
454
497
  if sudo_users_array.include?(current_user)
455
498
  return true
456
499
  end
@@ -468,7 +511,7 @@ end
468
511
 
469
512
  #Main thread
470
513
 
471
- log("Init Ejabberd Maintenance script")
514
+ #log("Init Ejabberd Maintenance script")
472
515
 
473
516
  begin
474
517
  if ARGV[0] and PARAMS_FOR_COMMANDS.keys.include?(ARGV[0])
@@ -25,7 +25,7 @@ def getOption(option)
25
25
  return "Undefined"
26
26
  end
27
27
 
28
- $url = getOption("reset_connection_api=")
28
+ $url = "http://" + getOption("web_domain=") + "/xmpp/resetConnection"
29
29
  $pass = getOption("ejabberd_password=")
30
30
 
31
31
 
@@ -25,7 +25,7 @@ def getOption(option)
25
25
  return "Undefined"
26
26
  end
27
27
 
28
- $url = getOption("set_connection_api=")
28
+ $url = "http://" + getOption("web_domain=") + "/xmpp/setConnection"
29
29
  $pass = getOption("ejabberd_password=")
30
30
 
31
31
 
@@ -25,7 +25,7 @@ def getOption(option)
25
25
  return "Undefined"
26
26
  end
27
27
 
28
- $url = getOption("set_presence_api=")
28
+ $url = "http://" + getOption("web_domain=") + "/xmpp/setPresence"
29
29
  $pass = getOption("ejabberd_password=")
30
30
 
31
31
 
@@ -25,8 +25,9 @@ def getOption(option)
25
25
  return "Undefined"
26
26
  end
27
27
 
28
- $url = getOption("synchronize_presence_api=")
28
+ $url = "http://" + getOption("web_domain=") + "/xmpp/synchronizePresence"
29
29
  $pass = getOption("ejabberd_password=")
30
+ $scripts_path = getOption("scripts_path=")
30
31
 
31
32
 
32
33
  def log(text)
@@ -37,7 +38,8 @@ def synchronize()
37
38
  log("Start Synchronize")
38
39
 
39
40
  users = []
40
- output = %x[ejabberdctl connected-users]
41
+ command = $scripts_path + "/emanagement getConnectedUsers"
42
+ output = %x[#{command}]
41
43
  sessions = output.split("\n")
42
44
 
43
45
  sessions.each do |session|
@@ -25,7 +25,7 @@ def getOption(option)
25
25
  return "Undefined"
26
26
  end
27
27
 
28
- $url = getOption("unset_connection_api=")
28
+ $url = "http://" + getOption("web_domain=") + "/xmpp/unsetConnection"
29
29
  $pass = getOption("ejabberd_password=")
30
30
 
31
31
 
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env ruby
2
+ #Unset Presence Script
3
+ #@author Aldo
4
+
5
+ require 'logger'
6
+ require 'rest_client'
7
+
8
+ path = "/var/log/ejabberd/scripts.log"
9
+ file = File.open(path, File::WRONLY | File::APPEND | File::CREAT)
10
+ file.sync = true
11
+ $logger = Logger.new(file)
12
+ $logger.level = Logger::DEBUG
13
+
14
+ def getOption(option)
15
+ File.open('/etc/ejabberd/ssconfig.cfg', 'r') do |f1|
16
+ while line = f1.gets
17
+ line = line.gsub(/\n/,'')
18
+ if line.match(/^#/)
19
+ #Comments
20
+ elsif line.match(/^#{option}/)
21
+ return line.gsub(/#{option}/,'')
22
+ end
23
+ end
24
+ end
25
+ return "Undefined"
26
+ end
27
+
28
+ $url = "http://" + getOption("web_domain=") + "/xmpp/unsetPresence"
29
+ $pass = getOption("ejabberd_password=")
30
+
31
+
32
+ def log(text)
33
+ $logger.info "Unset Presence Script: " + text
34
+ end
35
+
36
+ def unsetPresence(username)
37
+ log("unsetPresence(#{username})")
38
+ RestClient.post($url, :name => username, :password => $pass)
39
+ return true
40
+
41
+ rescue RestClient::Exception
42
+ log("RestClient::Exception with unsetPresence(#{username})")
43
+ end
44
+
45
+
46
+ unsetPresence(ARGV[0])
47
+
48
+
@@ -61,6 +61,10 @@ on_presence(User, _Server, _Resource, Packet) ->
61
61
 
62
62
  on_unset_presence(User, _Server, _Resource, _Status) ->
63
63
  ?INFO_MSG("mod_sspresence: on_unset_presence (~p)", [User]),
64
+ Login_path = string:concat(getOptionValue("scripts_path="), "/unset_presence_script "),
65
+ %% Wait for on_remove_connection
66
+ %% ?INFO_MSG("mod_sspresence: unset_presence_script call with user (~p)", [User]),
67
+ %% os:cmd(string:join([Login_path, User , Status], " "));
64
68
  ok.
65
69
 
66
70
  on_packet_send(From, _To, {xmlelement, Type, _Attr, Subel} = _Packet) ->
@@ -39,7 +39,7 @@ module SocialStream
39
39
  elsif self.positive?
40
40
  #Case: Possitive tie unidirectional
41
41
  #Execute addBuddyToRoster(userSID,buddySID,buddyNick,buddyGroup,subscription_type)
42
- subscription_type = "to"
42
+ subscription_type = "from"
43
43
  SocialStream::Presence::XmppServerOrder::addBuddyToRoster(user_sid,buddy_sid,buddy_name,"SocialStream",subscription_type)
44
44
  else
45
45
  #Negative Tie
@@ -1,5 +1,5 @@
1
1
  module Socialstream
2
2
  module Presence
3
- VERSION = "0.1.3"
3
+ VERSION = "0.1.4"
4
4
  end
5
5
  end
@@ -31,32 +31,16 @@ module SocialStream
31
31
  end
32
32
 
33
33
 
34
+
34
35
  def synchronizePresence
35
-
36
- if !isEjabberdNodeUp
36
+ if isEjabberdNodeUp
37
+ output = executeEmanagementCommand("getConnectedUsers",[])
38
+ user_slugs = output.split("\n")
39
+ synchronizePresenceForSlugs(user_slugs)
40
+ else
37
41
  resetPresence
38
42
  return "Xmpp Server Down: Reset Connected Users"
39
- end
40
-
41
- if SocialStream::Presence.remote_xmpp_server
42
- command = buildCommand("synchronize_presence_script","",[])
43
- executeCommand(command)
44
- else
45
- #SocialStream::Presence.remote_xmpp_server=false
46
-
47
- #Get connected users locally
48
- users = []
49
- output = %x[ejabberdctl connected-users]
50
- sessions = output.split("\n")
51
-
52
- sessions.each do |session|
53
- users << session.split("@")[0]
54
- puts session.split("@")[0]
55
- end
56
-
57
- synchronizePresenceForSlugs(users)
58
-
59
- end
43
+ end
60
44
  end
61
45
 
62
46
 
@@ -93,6 +77,7 @@ module SocialStream
93
77
 
94
78
 
95
79
  def synchronizePresenceForSlugs(user_slugs)
80
+
96
81
  #Check connected users
97
82
  users = User.find_all_by_connected(true)
98
83
 
@@ -211,7 +196,7 @@ module SocialStream
211
196
 
212
197
  def isEjabberdNodeUp
213
198
  output = executeEmanagementCommand("isEjabberdNodeStarted",[])
214
- nodeUp = output.split("\n")[3]
199
+ nodeUp = output.split("\n")[0]
215
200
  return (nodeUp and nodeUp.strip()=="true")
216
201
  end
217
202
 
@@ -11,9 +11,10 @@ Gem::Specification.new do |s|
11
11
  s.files = `git ls-files`.split("\n")
12
12
 
13
13
  # Gem dependencies
14
- s.add_runtime_dependency('social_stream-base', '~> 0.10.3')
14
+ s.add_runtime_dependency('social_stream-base', '~> 0.10.4')
15
15
  s.add_runtime_dependency('social_stream-documents', '~> 0.5.0')
16
16
  s.add_runtime_dependency('social_stream-events', '~> 0.1.0')
17
+ s.add_runtime_dependency('social_stream-linkser', '~> 0.0.1')
17
18
 
18
19
  # Development Gem dependencies
19
20
  #
@@ -5,4 +5,5 @@ ActiveRecord::Schema.define(:version => 0) do
5
5
  CreateSocialStream.up
6
6
  ActsAsTaggableOnMigration.up
7
7
  CreateSocialStreamDocuments.up
8
+ CreateSocialStreamLinkser.up
8
9
  end
data/spec/support/db.rb CHANGED
@@ -1,10 +1,15 @@
1
- require 'social_stream/migrations/documents'
2
- require 'social_stream/migrations/events'
1
+ gems = %w{ documents events linkser }
3
2
 
4
- SocialStream::Migrations::Events.new.down
5
- SocialStream::Migrations::Documents.new.down
6
- SocialStream::Migrations::Base.new.down
3
+ gems.each do |g|
4
+ require "social_stream/migrations/#{ g }"
5
+ end
7
6
 
8
- SocialStream::Migrations::Base.new.up
9
- SocialStream::Migrations::Documents.new.up
10
- SocialStream::Migrations::Events.new.up
7
+ gems.unshift("base")
8
+
9
+ gems.reverse.each do |g|
10
+ "SocialStream::Migrations::#{ g.camelize }".constantize.new.down
11
+ end
12
+
13
+ gems.each do |g|
14
+ "SocialStream::Migrations::#{ g.camelize }".constantize.new.up
15
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: social_stream
3
3
  version: !ruby/object:Gem::Version
4
- hash: 45
4
+ hash: 39
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 13
9
- - 3
10
- version: 0.13.3
8
+ - 14
9
+ - 0
10
+ version: 0.14.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - GING - DIT - UPM
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-12-02 00:00:00 +01:00
19
+ date: 2011-12-05 00:00:00 +01:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -27,12 +27,12 @@ dependencies:
27
27
  requirements:
28
28
  - - ~>
29
29
  - !ruby/object:Gem::Version
30
- hash: 49
30
+ hash: 63
31
31
  segments:
32
32
  - 0
33
33
  - 10
34
- - 3
35
- version: 0.10.3
34
+ - 4
35
+ version: 0.10.4
36
36
  type: :runtime
37
37
  version_requirements: *id001
38
38
  - !ruby/object:Gem::Dependency
@@ -68,9 +68,25 @@ dependencies:
68
68
  type: :runtime
69
69
  version_requirements: *id003
70
70
  - !ruby/object:Gem::Dependency
71
- name: capybara
71
+ name: social_stream-linkser
72
72
  prerelease: false
73
73
  requirement: &id004 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ~>
77
+ - !ruby/object:Gem::Version
78
+ hash: 29
79
+ segments:
80
+ - 0
81
+ - 0
82
+ - 1
83
+ version: 0.0.1
84
+ type: :runtime
85
+ version_requirements: *id004
86
+ - !ruby/object:Gem::Dependency
87
+ name: capybara
88
+ prerelease: false
89
+ requirement: &id005 !ruby/object:Gem::Requirement
74
90
  none: false
75
91
  requirements:
76
92
  - - ~>
@@ -82,11 +98,11 @@ dependencies:
82
98
  - 9
83
99
  version: 0.3.9
84
100
  type: :development
85
- version_requirements: *id004
101
+ version_requirements: *id005
86
102
  - !ruby/object:Gem::Dependency
87
103
  name: sqlite3
88
104
  prerelease: false
89
- requirement: &id005 !ruby/object:Gem::Requirement
105
+ requirement: &id006 !ruby/object:Gem::Requirement
90
106
  none: false
91
107
  requirements:
92
108
  - - ">="
@@ -96,11 +112,11 @@ dependencies:
96
112
  - 0
97
113
  version: "0"
98
114
  type: :development
99
- version_requirements: *id005
115
+ version_requirements: *id006
100
116
  - !ruby/object:Gem::Dependency
101
117
  name: ruby-debug
102
118
  prerelease: false
103
- requirement: &id006 !ruby/object:Gem::Requirement
119
+ requirement: &id007 !ruby/object:Gem::Requirement
104
120
  none: false
105
121
  requirements:
106
122
  - - ~>
@@ -112,11 +128,11 @@ dependencies:
112
128
  - 3
113
129
  version: 0.10.3
114
130
  type: :development
115
- version_requirements: *id006
131
+ version_requirements: *id007
116
132
  - !ruby/object:Gem::Dependency
117
133
  name: rspec-rails
118
134
  prerelease: false
119
- requirement: &id007 !ruby/object:Gem::Requirement
135
+ requirement: &id008 !ruby/object:Gem::Requirement
120
136
  none: false
121
137
  requirements:
122
138
  - - ~>
@@ -128,11 +144,11 @@ dependencies:
128
144
  - 0
129
145
  version: 2.5.0
130
146
  type: :development
131
- version_requirements: *id007
147
+ version_requirements: *id008
132
148
  - !ruby/object:Gem::Dependency
133
149
  name: factory_girl
134
150
  prerelease: false
135
- requirement: &id008 !ruby/object:Gem::Requirement
151
+ requirement: &id009 !ruby/object:Gem::Requirement
136
152
  none: false
137
153
  requirements:
138
154
  - - ~>
@@ -144,11 +160,11 @@ dependencies:
144
160
  - 2
145
161
  version: 1.3.2
146
162
  type: :development
147
- version_requirements: *id008
163
+ version_requirements: *id009
148
164
  - !ruby/object:Gem::Dependency
149
165
  name: forgery
150
166
  prerelease: false
151
- requirement: &id009 !ruby/object:Gem::Requirement
167
+ requirement: &id010 !ruby/object:Gem::Requirement
152
168
  none: false
153
169
  requirements:
154
170
  - - ~>
@@ -160,11 +176,11 @@ dependencies:
160
176
  - 6
161
177
  version: 0.3.6
162
178
  type: :development
163
- version_requirements: *id009
179
+ version_requirements: *id010
164
180
  - !ruby/object:Gem::Dependency
165
181
  name: ci_reporter
166
182
  prerelease: false
167
- requirement: &id010 !ruby/object:Gem::Requirement
183
+ requirement: &id011 !ruby/object:Gem::Requirement
168
184
  none: false
169
185
  requirements:
170
186
  - - ~>
@@ -176,7 +192,7 @@ dependencies:
176
192
  - 4
177
193
  version: 1.6.4
178
194
  type: :development
179
- version_requirements: *id010
195
+ version_requirements: *id011
180
196
  description: Social Stream is a Ruby on Rails engine for building social network websites. It supports contacts, posts, file uploads, private messages and many more.
181
197
  email:
182
198
  executables: []
@@ -1126,9 +1142,20 @@ files:
1126
1142
  - linkser/app/assets/javascripts/social_stream-linkser.js
1127
1143
  - linkser/app/assets/stylesheets/linkser.css.scss
1128
1144
  - linkser/app/assets/stylesheets/social_stream-linkser.css
1145
+ - linkser/app/controllers/links_controller.rb
1146
+ - linkser/app/controllers/linkser_controller.rb
1147
+ - linkser/app/models/link.rb
1148
+ - linkser/app/views/links/_link.html.erb
1149
+ - linkser/app/views/links/_link_preview.html.erb
1150
+ - linkser/app/views/links/_link_with_details.html.erb
1151
+ - linkser/app/views/links/create.js.erb
1152
+ - linkser/app/views/links/destroy.js.erb
1153
+ - linkser/app/views/links/show.html.erb
1154
+ - linkser/app/views/posts/_new_activity_fields.erb
1129
1155
  - linkser/config/locales/en.yml
1130
1156
  - linkser/config/locales/es.yml
1131
1157
  - linkser/config/routes.rb
1158
+ - linkser/db/migrate/20111129100618_create_social_stream_linkser.rb
1132
1159
  - linkser/lib/generators/social_stream/linkser/install_generator.rb
1133
1160
  - linkser/lib/social_stream-linkser.rb
1134
1161
  - linkser/lib/social_stream/linkser/engine.rb
@@ -1270,6 +1297,7 @@ files:
1270
1297
  - presence/db/migrate/20111116194112_add_chat_enabled_column_to_user.rb
1271
1298
  - presence/ejabberd/conf/ejabberd_example.cfg
1272
1299
  - presence/ejabberd/conf/ssconfig_example.cfg
1300
+ - presence/ejabberd/ejabberd_files.zip
1273
1301
  - presence/ejabberd/ejabberd_scripts/authentication_script
1274
1302
  - presence/ejabberd/ejabberd_scripts/development_scripts/compile_module
1275
1303
  - presence/ejabberd/ejabberd_scripts/development_scripts/generate_random_password
@@ -1284,6 +1312,7 @@ files:
1284
1312
  - presence/ejabberd/ejabberd_scripts/set_presence_script
1285
1313
  - presence/ejabberd/ejabberd_scripts/synchronize_presence_script
1286
1314
  - presence/ejabberd/ejabberd_scripts/unset_connection_script
1315
+ - presence/ejabberd/ejabberd_scripts/unset_presence_script
1287
1316
  - presence/ejabberd/mod_admin_extra/mod_admin_extra.beam
1288
1317
  - presence/ejabberd/mod_admin_extra/mod_admin_extra.erl
1289
1318
  - presence/ejabberd/mod_sspresence/mod_sspresence.beam