social_stream 0.12.0 → 0.12.1
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.
- data/base/app/views/groups/index.html.erb +1 -1
- data/base/app/views/users/index.html.erb +1 -1
- data/base/app/views/users/show.xml.builder +13 -26
- data/base/config/routes.rb +2 -1
- data/base/lib/social_stream/base/version.rb +1 -1
- data/documents/app/assets/javascripts/documents.js.erb +11 -0
- data/documents/app/assets/stylesheets/show.css.scss +30 -1
- data/documents/app/controllers/audios_controller.rb +1 -1
- data/documents/app/controllers/documents_controller.rb +48 -7
- data/documents/app/controllers/pictures_controller.rb +1 -1
- data/documents/app/controllers/videos_controller.rb +1 -1
- data/documents/app/models/document.rb +4 -1
- data/documents/app/views/audios/index.html.erb +1 -1
- data/documents/app/views/audios/show.html.erb +1 -1
- data/documents/app/views/{common_documents → common}/_document_info.html.erb +4 -3
- data/documents/app/views/common/_edit_form.html.erb +49 -0
- data/documents/app/views/{common_documents → common}/_index.html.erb +0 -0
- data/documents/app/views/{common_documents → common}/_show.html.erb +1 -1
- data/documents/app/views/documents/index.html.erb +1 -1
- data/documents/app/views/documents/show.html.erb +1 -1
- data/documents/app/views/pictures/index.html.erb +1 -1
- data/documents/app/views/pictures/show.html.erb +1 -1
- data/documents/app/views/videos/index.html.erb +1 -1
- data/documents/app/views/videos/show.html.erb +1 -1
- data/documents/config/locales/en.yml +3 -1
- data/documents/config/locales/es.yml +3 -1
- data/documents/lib/social_stream/documents/version.rb +1 -1
- data/documents/lib/social_stream/toolbar_config/documents.rb +14 -9
- data/documents/social_stream-documents.gemspec +1 -1
- data/events/Rakefile +3 -13
- data/events/lib/social_stream/events/version.rb +1 -1
- data/events/lib/social_stream/toolbar_config/events.rb +0 -6
- data/events/social_stream-events.gemspec +1 -1
- data/lib/social_stream/version.rb +1 -1
- data/presence/ejabberd/ejabberd_scripts/emanagement +237 -62
- data/presence/ejabberd/mod_sspresence/mod_sspresence.beam +0 -0
- data/presence/lib/social_stream/presence/models/buddy_manager.rb +33 -0
- data/presence/lib/social_stream/presence/version.rb +1 -1
- data/presence/lib/social_stream/presence/xmpp_server_order.rb +42 -13
- data/social_stream.gemspec +3 -3
- metadata +17 -17
- data/documents/app/controllers/common_documents_controller.rb +0 -45
@@ -39,7 +39,7 @@
|
|
39
39
|
<div class="row">
|
40
40
|
<div class="center">
|
41
41
|
<% for g in Group.distinct_initials %>
|
42
|
-
<%= link_to g.initial,{:letter => g.initial,:page => 1},:class => "user_letter_link" %>
|
42
|
+
<%= link_to g.initial.capitalize,{:letter => g.initial,:page => 1},:class => "user_letter_link" %>
|
43
43
|
<% end %>
|
44
44
|
</div>
|
45
45
|
</div>
|
@@ -25,7 +25,7 @@
|
|
25
25
|
<div class="center">
|
26
26
|
<%= link_to t('user.all_n', :count => User.count), users_path %> -
|
27
27
|
<% for u in User.distinct_initials %>
|
28
|
-
<%= link_to u.initial,{:letter => u.initial,:page => 1},:class => "user_letter_link" %>
|
28
|
+
<%= link_to u.initial.capitalize,{:letter => u.initial,:page => 1},:class => "user_letter_link" %>
|
29
29
|
<% end %>
|
30
30
|
</div>
|
31
31
|
</div>
|
@@ -1,28 +1,15 @@
|
|
1
1
|
xml.instruct!
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
xml.contact do
|
16
|
-
xml.uid u.id
|
17
|
-
xml.slug u.slug
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
@user.actors(:subject_type => 'group', :direction => :senders).each do |g|
|
22
|
-
xml.group do
|
23
|
-
xml.gid g.id
|
24
|
-
xml.slug g.slug
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
2
|
+
xml.user do
|
3
|
+
xml.uid @user.id
|
4
|
+
xml.name @user.name
|
5
|
+
xml.slug @user.slug
|
6
|
+
if user_signed_in?
|
7
|
+
xml.email @user.email
|
8
|
+
end
|
9
|
+
xml.userSince @user.created_at
|
10
|
+
xml.birthday @user.profile.birthday
|
11
|
+
xml.organization @user.profile.organization
|
12
|
+
xml.city @user.profile.city
|
13
|
+
xml.country @user.profile.country
|
14
|
+
xml.website @user.profile.website
|
28
15
|
end
|
data/base/config/routes.rb
CHANGED
@@ -82,8 +82,9 @@ Rails.application.routes.draw do
|
|
82
82
|
match 'api/user/:id' => 'api#users', :as => :api_user
|
83
83
|
match 'api/me' => 'api#users', :as => :api_me
|
84
84
|
match 'api/me/home/' => 'api#activity_atom_feed', :format => 'atom', :as => :api_my_home
|
85
|
+
match 'api/user/:id/public' => 'api#activity_atom_feed', :format => 'atom', :as => :api_user_activities
|
86
|
+
|
85
87
|
match 'api/me/contacts' => 'contacts#index', :format => 'json', :as => :api_contacts
|
86
88
|
match 'api/subjects/:s/contacts' => 'contacts#index', :format => 'json', :as => :api_subject_contacts
|
87
|
-
match 'api/user/:id/public' => 'api#activity_atom_feed', :format => 'atom', :as => :api_user_activities
|
88
89
|
##/API##
|
89
90
|
end
|
@@ -48,3 +48,14 @@ showAllDocumentComments = function(id){
|
|
48
48
|
//and hide the hide_show_comments
|
49
49
|
$("#"+id).children(".hide_show_comments").hide();
|
50
50
|
};
|
51
|
+
|
52
|
+
toggleDocumentEdit = function(){
|
53
|
+
if($("#document_edit").css("display")=="none"){
|
54
|
+
$("#document_edit").show("slow");
|
55
|
+
$("#document_edit_action").addClass("selected");
|
56
|
+
|
57
|
+
}else{
|
58
|
+
$("#document_edit").hide("slow");
|
59
|
+
$("#document_edit_action").removeClass("selected");
|
60
|
+
}
|
61
|
+
}
|
@@ -45,13 +45,42 @@
|
|
45
45
|
margin-left: 30px;
|
46
46
|
}
|
47
47
|
#document_info #actions .action{
|
48
|
-
margin-right: 10px;
|
48
|
+
margin-right: 10px;
|
49
|
+
padding: 5px;
|
50
|
+
}
|
51
|
+
#document_info #actions .action.selected{
|
52
|
+
border: thin solid $separation-color;
|
53
|
+
background: $secondary-color;
|
49
54
|
}
|
50
55
|
#document_info #actions .action img{
|
51
56
|
width: 16px;
|
52
57
|
height: 16px;
|
53
58
|
}
|
54
59
|
|
60
|
+
#document_edit {
|
61
|
+
margin: 5px 5px 0px 5px;
|
62
|
+
border: thin solid $separation-color;
|
63
|
+
background: $secondary-color;
|
64
|
+
|
65
|
+
}
|
66
|
+
#document_edit textarea{
|
67
|
+
resize: none;
|
68
|
+
height: 75px;
|
69
|
+
}
|
70
|
+
#document_edit .form_row {
|
71
|
+
padding: 5px 10px;
|
72
|
+
}
|
73
|
+
#document_edit .form_label {
|
74
|
+
width: 100px;
|
75
|
+
}
|
76
|
+
#document_edit .form_field {
|
77
|
+
width: 415px;
|
78
|
+
padding: 0;
|
79
|
+
}
|
80
|
+
#document_edit .form_tag {
|
81
|
+
width: 100%;
|
82
|
+
}
|
83
|
+
|
55
84
|
#document_comments {
|
56
85
|
margin-top: 20px;
|
57
86
|
padding-top: 10px;
|
@@ -1,2 +1,2 @@
|
|
1
|
-
class AudiosController <
|
1
|
+
class AudiosController < DocumentsController
|
2
2
|
end
|
@@ -1,19 +1,44 @@
|
|
1
|
-
class DocumentsController <
|
1
|
+
class DocumentsController < InheritedResources::Base
|
2
2
|
respond_to :html, :js
|
3
|
-
|
4
|
-
SEND_FILE_METHOD = :default
|
5
3
|
|
4
|
+
belongs_to_subjects :optional => true
|
5
|
+
|
6
|
+
before_filter :profile_subject!, :only => :index
|
7
|
+
|
8
|
+
load_and_authorize_resource :except => :index
|
9
|
+
|
10
|
+
SEND_FILE_METHOD = :default
|
6
11
|
def create
|
7
12
|
super do |format|
|
8
13
|
format.all {redirect_to request.referer || home_path}
|
9
14
|
end
|
10
15
|
end
|
11
|
-
|
16
|
+
|
17
|
+
def update
|
18
|
+
update! do |success, failure|
|
19
|
+
failure.html { render :action => :show }
|
20
|
+
success.html { render :action => :show }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def show
|
25
|
+
respond_to do |format|
|
26
|
+
format.html {render :action => :show}
|
27
|
+
format.all {
|
28
|
+
path = resource.file.path(params[:style] || params[:format])
|
29
|
+
|
30
|
+
send_file path,
|
31
|
+
:filename => resource.file_file_name,
|
32
|
+
:disposition => "inline"
|
33
|
+
}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
12
37
|
#TODO: we have to add the mimetype as in videos_controller
|
13
38
|
def download
|
14
39
|
path = @document.file.path(params[:style])
|
15
40
|
|
16
|
-
head(:bad_request) and return unless File.exist?(path)
|
41
|
+
head(:bad_request) and return unless File.exist?(path)
|
17
42
|
|
18
43
|
send_file_options = {
|
19
44
|
:filename => @document.file_file_name,
|
@@ -22,13 +47,29 @@ class DocumentsController < CommonDocumentsController
|
|
22
47
|
|
23
48
|
# Ask Victor about the rationale of this:
|
24
49
|
case SEND_FILE_METHOD
|
25
|
-
|
26
|
-
|
50
|
+
when :apache then send_file_options[:x_sendfile] = true
|
51
|
+
when :nginx then head(:x_accel_redirect => path.gsub(Rails.root, ''))
|
27
52
|
end
|
28
53
|
|
29
54
|
send_file(path, send_file_options)
|
30
55
|
end
|
31
56
|
|
57
|
+
def destroy
|
58
|
+
@post_activity = resource.post_activity
|
59
|
+
|
60
|
+
destroy!
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def collection
|
66
|
+
@activities = profile_subject.wall(:profile,
|
67
|
+
:for => current_subject,
|
68
|
+
:object_type => Array(self.class.index_object_type)).
|
69
|
+
page(params[:page]).
|
70
|
+
per(params[:per])
|
71
|
+
end
|
72
|
+
|
32
73
|
class << self
|
33
74
|
def index_object_type
|
34
75
|
[ :Audio, :Video, :Picture, :Document ]
|
@@ -1,2 +1,2 @@
|
|
1
|
-
class PicturesController <
|
1
|
+
class PicturesController < DocumentsController
|
2
2
|
end
|
@@ -1,2 +1,2 @@
|
|
1
|
-
class VideosController <
|
1
|
+
class VideosController < DocumentsController
|
2
2
|
end
|
@@ -8,8 +8,11 @@ class Document < ActiveRecord::Base
|
|
8
8
|
:path => ':rails_root/documents/:class/:id_partition/:style/:filename.:extension'
|
9
9
|
|
10
10
|
validates_attachment_presence :file
|
11
|
+
validates_presence_of :title
|
11
12
|
|
12
|
-
|
13
|
+
before_validation(:on => :create) do
|
14
|
+
set_title_and_description
|
15
|
+
end
|
13
16
|
|
14
17
|
define_index do
|
15
18
|
indexes title
|
@@ -1 +1 @@
|
|
1
|
-
<%=render(:partial => '
|
1
|
+
<%=render(:partial => 'common/index') %>
|
@@ -1,2 +1,2 @@
|
|
1
|
-
<%= render :partial => '
|
1
|
+
<%= render :partial => 'common/show',
|
2
2
|
:locals => { :document => @audio } %>
|
@@ -24,11 +24,12 @@
|
|
24
24
|
</div>
|
25
25
|
<br class="clearfloat" />
|
26
26
|
<div id="actions">
|
27
|
-
<%= link_to image_tag("btn/download.png") + t('document.actions.download'),
|
28
|
-
<%= link_to image_tag("btn/edit.png") + t('document.actions.edit'),
|
27
|
+
<%= link_to content_tag(:span,image_tag("btn/download.png") + t('document.actions.download'), :class => :action), download_document_path(document) %>
|
28
|
+
<%= link_to content_tag(:span,image_tag("btn/edit.png") + t('document.actions.edit'), :class => :action, :id => :document_edit_action), "javascript:toggleDocumentEdit();" %>
|
29
29
|
<% if document.post_activity.delete_object_by?(current_subject) %>
|
30
|
-
<%= link_to image_tag("btn/error.png") + t('document.actions.delete'), document.post_activity.direct_object , :confirm => t('confirm_delete',
|
30
|
+
<%= link_to content_tag(:span,image_tag("btn/error.png") + t('document.actions.delete'), :class => :action), document.post_activity.direct_object , :confirm => t('confirm_delete',
|
31
31
|
:scope => document.post_activity.direct_object.class.to_s.underscore), :method => :delete %>
|
32
32
|
<% end %>
|
33
33
|
</div>
|
34
34
|
</div>
|
35
|
+
<%= render :partial => "common/edit_form", :locals => {:document => document} %>
|
@@ -0,0 +1,49 @@
|
|
1
|
+
<div class="block" id="document_edit" style="display:none;">
|
2
|
+
<%= form_for(document, :html => { :method => :put }) do |f| %>
|
3
|
+
<% if document and document.errors.any? %>
|
4
|
+
<%= javascript_tag do %>
|
5
|
+
$(document).ready(function(){
|
6
|
+
toggleDocumentEdit();
|
7
|
+
});
|
8
|
+
<% end %>
|
9
|
+
<div class="error">
|
10
|
+
<ul>
|
11
|
+
<% document.errors.full_messages.each do |msg| %>
|
12
|
+
<li>
|
13
|
+
<%= msg %>
|
14
|
+
</li>
|
15
|
+
<% end %>
|
16
|
+
</ul>
|
17
|
+
</div>
|
18
|
+
<% end %>
|
19
|
+
<div class="form_row">
|
20
|
+
<div class="form_label">
|
21
|
+
<%= f.label t('document.info.title.title') %>
|
22
|
+
</div>
|
23
|
+
<div class="form_field">
|
24
|
+
<%= f.text_field :title, :class => "form_tag" %>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
<div class="form_row">
|
28
|
+
<div class="form_label">
|
29
|
+
<%= f.label t('document.info.description.title') %>
|
30
|
+
</div>
|
31
|
+
<div class="form_field">
|
32
|
+
<%= f.text_area :description, :class => "form_tag" %>
|
33
|
+
</div>
|
34
|
+
</div>
|
35
|
+
<!--
|
36
|
+
<div class="form_row">
|
37
|
+
<div class="form_label">
|
38
|
+
<%#= f.label t('document.info.file.title') %>
|
39
|
+
</div>
|
40
|
+
<div class="form_field">
|
41
|
+
<%#= f.file_field :file, :class => "form_tag" %>
|
42
|
+
</div>
|
43
|
+
</div>
|
44
|
+
-->
|
45
|
+
<div class="actions center">
|
46
|
+
<%= f.submit t('document.actions.edit'), :class => "button" %>
|
47
|
+
</div>
|
48
|
+
<% end %>
|
49
|
+
</div>
|
File without changes
|
@@ -28,7 +28,7 @@
|
|
28
28
|
|
29
29
|
<%= show_view_for document %>
|
30
30
|
|
31
|
-
<%= render :partial => "document_info", :locals => {:document => document} %>
|
31
|
+
<%= render :partial => "common/document_info", :locals => {:document => document} %>
|
32
32
|
|
33
33
|
<div id="document_comments">
|
34
34
|
<%= render :partial => 'activities/comments', :locals => { :activity => document.post_activity } %>
|
@@ -1 +1 @@
|
|
1
|
-
<%=render(:partial => '
|
1
|
+
<%=render(:partial => 'common/index') %>
|
@@ -1,2 +1,2 @@
|
|
1
|
-
<%= render :partial => '
|
1
|
+
<%= render :partial => 'common/show',
|
2
2
|
:locals => { :document => @document } %>
|
@@ -1 +1 @@
|
|
1
|
-
<%=render(:partial => '
|
1
|
+
<%=render(:partial => 'common/index') %>
|
@@ -1,2 +1,2 @@
|
|
1
|
-
<%= render :partial => '
|
1
|
+
<%= render :partial => 'common/show',
|
2
2
|
:locals => { :document => @picture } %>
|
@@ -1 +1 @@
|
|
1
|
-
<%=render(:partial => '
|
1
|
+
<%=render(:partial => 'common/index') %>
|
@@ -1,2 +1,2 @@
|
|
1
|
-
<%= render :partial => '
|
1
|
+
<%= render :partial => 'common/show',
|
2
2
|
:locals => { :document => @video } %>
|
@@ -21,6 +21,8 @@ en:
|
|
21
21
|
updated_at: "Updated at"
|
22
22
|
description:
|
23
23
|
title: "Description"
|
24
|
+
file:
|
25
|
+
title: "Upload"
|
24
26
|
title:
|
25
27
|
title: "Title"
|
26
28
|
mine: "My documents"
|
@@ -43,7 +45,7 @@ en:
|
|
43
45
|
resource:
|
44
46
|
all: "All Resources"
|
45
47
|
confirm_delete: "Delete resource?"
|
46
|
-
title: "
|
48
|
+
title: "Repository"
|
47
49
|
mine: "My resources"
|
48
50
|
msg: "Uploaded a resource:"
|
49
51
|
not_mine: "Resources"
|
@@ -21,6 +21,8 @@ es:
|
|
21
21
|
updated_at: "Última modificación"
|
22
22
|
description:
|
23
23
|
title: "Descripción"
|
24
|
+
file:
|
25
|
+
title: "Subir"
|
24
26
|
title:
|
25
27
|
title: "Título"
|
26
28
|
mine: "Mis documentos"
|
@@ -43,7 +45,7 @@ es:
|
|
43
45
|
resource:
|
44
46
|
all: "Todos los recursos"
|
45
47
|
confirm_delete: "¿Borrar recursos?"
|
46
|
-
title: "
|
48
|
+
title: "Repositorio"
|
47
49
|
mine: "Mis recursos"
|
48
50
|
msg: "Subió un recurso:"
|
49
51
|
not_mine: "Recursos"
|
@@ -6,17 +6,22 @@ module SocialStream
|
|
6
6
|
|
7
7
|
items << {
|
8
8
|
:key => :resources,
|
9
|
-
:name => image_tag("btn/btn_resource.png",:class =>"menu_icon")+t("resource
|
10
|
-
:url =>
|
11
|
-
:options => {:link => {:id => "resources_menu"}}
|
12
|
-
:items => [
|
13
|
-
{:key => :resources_documents,:name => image_tag("btn/btn_document.png")+t('document.title'),:url => polymorphic_path([subject, Document.new])},
|
14
|
-
{:key => :resources_pictures,:name => image_tag("btn/btn_gallery.png")+t('picture.title'),:url => polymorphic_path([subject, Picture.new])},
|
15
|
-
{:key => :resources_videos,:name => image_tag("btn/btn_video.png")+t('video.title'),:url => polymorphic_path([subject, Video.new])},
|
16
|
-
{:key => :resources_audios,:name => image_tag("btn/btn_audio.png")+t('audio.title'),:url => polymorphic_path([subject, Audio.new])}
|
17
|
-
]
|
9
|
+
:name => image_tag("btn/btn_resource.png",:class =>"menu_icon")+t("resource.title"),
|
10
|
+
:url => polymorphic_path([subject, Document.new]),
|
11
|
+
:options => {:link => {:id => "resources_menu"}}
|
18
12
|
}
|
19
13
|
end
|
14
|
+
|
15
|
+
def home_toolbar_items
|
16
|
+
items = super
|
17
|
+
|
18
|
+
items << {
|
19
|
+
:key => :resources,
|
20
|
+
:name => image_tag("btn/btn_resource.png",:class =>"menu_icon")+t("resource.title"),
|
21
|
+
:url => polymorphic_path([current_subject, Document.new]),
|
22
|
+
:options => {:link => {:id => "resources_menu"}}
|
23
|
+
}
|
24
|
+
end
|
20
25
|
end
|
21
26
|
end
|
22
27
|
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.9.
|
15
|
+
s.add_runtime_dependency('social_stream-base', '~> 0.9.24')
|
16
16
|
s.add_runtime_dependency('paperclip-ffmpeg', '~> 0.7.0')
|
17
17
|
s.add_runtime_dependency('paperclip','2.3.11')
|
18
18
|
s.add_runtime_dependency('delayed_paperclip','>= 0.7.2')
|
data/events/Rakefile
CHANGED
@@ -1,33 +1,23 @@
|
|
1
1
|
# encoding: UTF-8
|
2
|
-
require '
|
3
|
-
begin
|
4
|
-
require 'bundler/setup'
|
5
|
-
rescue LoadError
|
6
|
-
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
7
|
-
end
|
2
|
+
require 'bundler/gem_tasks'
|
8
3
|
|
9
|
-
require '
|
10
|
-
require 'rake/rdoctask'
|
4
|
+
require 'rdoc/task'
|
11
5
|
|
12
6
|
require 'rspec/core'
|
13
7
|
require 'rspec/core/rake_task'
|
14
8
|
|
15
|
-
require 'bundler'
|
16
|
-
|
17
9
|
RSpec::Core::RakeTask.new(:spec)
|
18
10
|
|
19
11
|
task :default => :spec
|
20
12
|
|
21
13
|
Rake::RDocTask.new(:rdoc) do |rdoc|
|
22
14
|
rdoc.rdoc_dir = 'rdoc'
|
23
|
-
rdoc.title = 'Socialstream
|
15
|
+
rdoc.title = 'Socialstream Events'
|
24
16
|
rdoc.options << '--line-numbers' << '--inline-source'
|
25
17
|
rdoc.rdoc_files.include('README.rdoc')
|
26
18
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
27
19
|
end
|
28
20
|
|
29
|
-
Bundler::GemHelper.install_tasks
|
30
|
-
|
31
21
|
# Modify this gem's tags
|
32
22
|
class Bundler::GemHelper
|
33
23
|
def version_tag
|
@@ -4,12 +4,6 @@ module SocialStream
|
|
4
4
|
def profile_toolbar_items(subject = current_subject)
|
5
5
|
items = super
|
6
6
|
|
7
|
-
items.find{ |i| i[:key] == :resources }[:items].unshift({
|
8
|
-
:key => :resources_events,
|
9
|
-
:name => image_tag("btn/btn_event.png")+t('conference.title'),
|
10
|
-
:url => polymorphic_path([subject, Event.new])
|
11
|
-
})
|
12
|
-
|
13
7
|
if SocialStream.activity_forms.include?(:event) &&
|
14
8
|
subject.is_a?(Event) &&
|
15
9
|
subject.agenda.present?
|
@@ -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.9.
|
15
|
+
s.add_runtime_dependency('social_stream-base', '~> 0.9.24')
|
16
16
|
s.add_runtime_dependency('conference_manager-ruby', '~> 0.0.3')
|
17
17
|
|
18
18
|
# Development Gem dependencies
|
@@ -34,36 +34,56 @@ end
|
|
34
34
|
$domain = getOption("server_domain=")
|
35
35
|
|
36
36
|
PARAMS_FOR_COMMANDS = {
|
37
|
-
'
|
38
|
-
'removeBuddyFromRoster' => 2,
|
39
|
-
'
|
40
|
-
'
|
41
|
-
'
|
42
|
-
'
|
43
|
-
'
|
44
|
-
'
|
45
|
-
'
|
46
|
-
'
|
47
|
-
'
|
48
|
-
'
|
49
|
-
'
|
37
|
+
'addBuddyToRoster' => 5,
|
38
|
+
'removeBuddyFromRoster' => 2,
|
39
|
+
'setBidireccionalBuddys' => 6,
|
40
|
+
'unsetBidireccionalBuddys' => 4,
|
41
|
+
'getRoster' => 1,
|
42
|
+
'removeRoster' => 1,
|
43
|
+
'removeAllRosters' => 0,
|
44
|
+
'getBuddysFromRoster' => 1,
|
45
|
+
'getAllUsersWithRoster' => 0,
|
46
|
+
'getAllRosters' => 0,
|
47
|
+
'printAllRosters' => 0,
|
48
|
+
'printAllBidirecctionalBuddys' => 0,
|
49
|
+
'checkUser' => 1,
|
50
|
+
'checkBidirecctionalBuddys' => 2,
|
51
|
+
'sendPresence' => 2,
|
52
|
+
'setPresence' => 1,
|
53
|
+
'unsetPresence' => 1,
|
54
|
+
'sendMessageToUser' => 3,
|
55
|
+
'getUserResource' => 1,
|
56
|
+
'isEjabberdNodeStarted' => 0,
|
57
|
+
'help' => 0,
|
50
58
|
}
|
51
59
|
|
52
60
|
SYNTAX_FOR_COMMANDS = {
|
53
|
-
'
|
54
|
-
'removeBuddyFromRoster' =>
|
55
|
-
'
|
56
|
-
'
|
57
|
-
'
|
58
|
-
'
|
59
|
-
'
|
60
|
-
'
|
61
|
-
'
|
62
|
-
'
|
63
|
-
'
|
64
|
-
'
|
61
|
+
'addBuddyToRoster' => 'addBuddyToRoster userSid buddySid buddyNick buddyGroup subscription_type',
|
62
|
+
'removeBuddyFromRoster' => 'removeBuddyFromRoster userSid buddySid',
|
63
|
+
'setBidireccionalBuddys' => 'setBidireccionalBuddys userASid userBSid userANick userBNick groupForA groupForB',
|
64
|
+
'unsetBidireccionalBuddys' => 'unsetBidireccionalBuddys userSid oldFriendSid oldFriendNick groupForOldFriend',
|
65
|
+
'getRoster' => 'getRoster username',
|
66
|
+
'removeRoster' => 'removeRoster username',
|
67
|
+
'removeAllRosters' => 'removeAllRosters',
|
68
|
+
'getBuddysFromRoster' => 'getBuddysFromRoster roster',
|
69
|
+
'getAllUsersWithRoster' => 'getAllUsersWithRoster',
|
70
|
+
'getAllRosters' => 'getAllRosters',
|
71
|
+
'printAllRosters' => 'printAllRosters',
|
72
|
+
'printAllBidirecctionalBuddys' => 'printAllBidirecctionalBuddys',
|
73
|
+
'checkUser' => 'checkUser user',
|
74
|
+
'checkBidirecctionalBuddys' => 'checkBidirecctionalBuddys userASid userBSid',
|
75
|
+
'sendPresence' => 'sendPresence username show',
|
76
|
+
'setPresence' => 'setPresence username',
|
77
|
+
'unsetPresence' => 'unsetPresence username',
|
78
|
+
'sendMessageToUser' => 'sendMessageToUser from_name to_name msg',
|
79
|
+
'getUserResource' => 'getUserResource username',
|
80
|
+
'isEjabberdNodeStarted' => 'isEjabberdNodeStarted',
|
81
|
+
'help' => 'help',
|
65
82
|
}
|
66
83
|
|
84
|
+
|
85
|
+
|
86
|
+
#Debug methods
|
67
87
|
def log(msg)
|
68
88
|
logWithTitle(msg,nil)
|
69
89
|
end
|
@@ -78,29 +98,60 @@ def logWithTitle(msg,title)
|
|
78
98
|
end
|
79
99
|
|
80
100
|
|
81
|
-
|
82
|
-
|
83
|
-
|
101
|
+
|
102
|
+
#Methods to manage rosters from Social Stream Rails App
|
103
|
+
|
104
|
+
def setBidireccionalBuddys(userASid,userBSid,userANick,userBNick,groupForA,groupForB)
|
105
|
+
addBuddyToRoster(userASid,userBSid,userBNick,groupForB,"both")
|
106
|
+
addBuddyToRoster(userBSid,userASid,userANick,groupForA,"both")
|
107
|
+
return "Done"
|
108
|
+
end
|
109
|
+
|
110
|
+
def unsetBidireccionalBuddys(userSid,oldFriendSid,oldFriendNick,groupForOldFriend)
|
111
|
+
if checkBidirecctionalBuddys(userSid,oldFriendSid)
|
112
|
+
removeBuddyFromRoster(userSid,oldFriendSid)
|
113
|
+
removeBuddyFromRoster(oldFriendSid,userSid)
|
114
|
+
addBuddyToRoster(userSid,oldFriendSid,oldFriendNick,groupForOldFriend,"to")
|
115
|
+
return "Done"
|
116
|
+
else
|
117
|
+
return userSid + " and " + oldFriendSid + " aren't bidireccional buddys"
|
118
|
+
end
|
84
119
|
end
|
85
120
|
|
86
|
-
def
|
87
|
-
|
121
|
+
def addBuddyToRoster(userSid,buddySid,buddyNick,buddyGroup,subscription_type)
|
122
|
+
user = userSid.split("@")[0]
|
123
|
+
buddy = buddySid.split("@")[0]
|
124
|
+
userDomain = userSid.split("@")[1]
|
125
|
+
buddyDomain = buddySid.split("@")[1]
|
126
|
+
command = "ejabberdctl add-rosteritem " + user + " " + userDomain + " " + buddy + " " + buddyDomain + " " + buddyNick + " " + buddyGroup + " " + subscription_type
|
88
127
|
%x[#{command}];
|
128
|
+
return "Done"
|
89
129
|
end
|
90
130
|
|
91
|
-
def
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
131
|
+
def removeBuddyFromRoster(userSid,buddySid)
|
132
|
+
user = userSid.split("@")[0]
|
133
|
+
buddy = buddySid.split("@")[0]
|
134
|
+
userDomain = userSid.split("@")[1]
|
135
|
+
buddyDomain = buddySid.split("@")[1]
|
136
|
+
if checkUserInRoster(buddy,getRoster(user))
|
137
|
+
command = "ejabberdctl delete_rosteritem " + user + " " + userDomain + " " + buddy + " " + buddyDomain
|
138
|
+
%x[#{command}];
|
139
|
+
return "Done"
|
140
|
+
else
|
141
|
+
return "User " + buddy + " not found in " + user + " roster."
|
96
142
|
end
|
97
|
-
return "Done"
|
98
143
|
end
|
99
144
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
145
|
+
|
146
|
+
#Roster Utilities
|
147
|
+
|
148
|
+
def getRoster(username)
|
149
|
+
if checkUser(username)
|
150
|
+
command = "ejabberdctl get_roster " + username + " " + $domain
|
151
|
+
%x[#{command}];
|
152
|
+
else
|
153
|
+
return "User " + username + " not found"
|
154
|
+
end
|
104
155
|
end
|
105
156
|
|
106
157
|
def getBuddysFromRoster(roster)
|
@@ -112,22 +163,126 @@ def getBuddysFromRoster(roster)
|
|
112
163
|
buddys
|
113
164
|
end
|
114
165
|
|
115
|
-
def
|
116
|
-
|
117
|
-
|
118
|
-
|
166
|
+
def removeRoster(username)
|
167
|
+
if checkUser(username)
|
168
|
+
user_sid = username + "@" + $domain
|
169
|
+
user_roster = getRoster(username);
|
170
|
+
user_buddys = getBuddysFromRoster(user_roster);
|
171
|
+
user_buddys.each do |buddy|
|
172
|
+
buddy_sid = buddy + "@" + $domain
|
173
|
+
removeBuddyFromRoster(user_sid,buddy_sid)
|
174
|
+
end
|
175
|
+
return "Done"
|
176
|
+
else
|
177
|
+
return "User " + username + " not found"
|
178
|
+
end
|
119
179
|
end
|
120
180
|
|
121
|
-
def
|
122
|
-
|
123
|
-
buddy = buddySid.split("@")[0]
|
124
|
-
userDomain = userSid.split("@")[1]
|
125
|
-
buddyDomain = buddySid.split("@")[1]
|
126
|
-
command = "ejabberdctl add-rosteritem " + user + " " + userDomain + " " + buddy + " " + buddyDomain + " " + buddyNick + " " + buddyGroup + " " + subscription_type
|
127
|
-
puts command
|
181
|
+
def removeAllRosters()
|
182
|
+
command = "ejabberdctl process_rosteritems delete any any any any"
|
128
183
|
%x[#{command}];
|
184
|
+
return "Done";
|
129
185
|
end
|
130
186
|
|
187
|
+
def getAllUsersWithRoster()
|
188
|
+
command = "ejabberdctl process_rosteritems list any any any any"
|
189
|
+
output = %x[#{command}];
|
190
|
+
|
191
|
+
i = 0
|
192
|
+
users = []
|
193
|
+
|
194
|
+
lines = output.split("\n");
|
195
|
+
items = lines[0].split(" ")[2]
|
196
|
+
|
197
|
+
#test if items string contains a correct number
|
198
|
+
if items.to_i.to_s == items
|
199
|
+
if items.to_i > 0
|
200
|
+
lines.each do |line|
|
201
|
+
if i%2==1
|
202
|
+
user = line.split(" ")[1].split("@")[0]
|
203
|
+
#puts i.to_s() + " :" + line
|
204
|
+
unless users.include?(user)
|
205
|
+
users << user
|
206
|
+
end
|
207
|
+
end
|
208
|
+
i=i+1
|
209
|
+
end
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
return users;
|
214
|
+
end
|
215
|
+
|
216
|
+
def getAllRosters()
|
217
|
+
rosterList = { }
|
218
|
+
|
219
|
+
users = getAllUsersWithRoster()
|
220
|
+
|
221
|
+
users.each do |user|
|
222
|
+
roster = getRoster(user)
|
223
|
+
rosterList.store(user,roster)
|
224
|
+
end
|
225
|
+
return rosterList
|
226
|
+
end
|
227
|
+
|
228
|
+
def printAllRosters()
|
229
|
+
rosterList = getAllRosters()
|
230
|
+
rosterList.keys.each do |user|
|
231
|
+
puts "\n"
|
232
|
+
puts "-------------------------------------"
|
233
|
+
puts user + " Roster"
|
234
|
+
puts "-------------------------------------"
|
235
|
+
puts rosterList[user]
|
236
|
+
puts "-------------------------------------"
|
237
|
+
puts "\n"
|
238
|
+
end
|
239
|
+
return "Done"
|
240
|
+
end
|
241
|
+
|
242
|
+
def getAllBidirecctionalBuddys()
|
243
|
+
b_buddys = []
|
244
|
+
users = getAllUsersWithRoster()
|
245
|
+
nonCheckedUsers = users
|
246
|
+
users.each do |user|
|
247
|
+
nonCheckedUsers.delete(user)
|
248
|
+
nonCheckedUsers.each do |checkUser|
|
249
|
+
if checkBidirecctionalBuddys(user + "@" + $domain,checkUser + "@" + $domain)
|
250
|
+
b_buddys << [user,checkUser]
|
251
|
+
end
|
252
|
+
end
|
253
|
+
end
|
254
|
+
return b_buddys
|
255
|
+
end
|
256
|
+
|
257
|
+
def printAllBidirecctionalBuddys()
|
258
|
+
puts "This may take a while..."
|
259
|
+
b_buddys = getAllBidirecctionalBuddys
|
260
|
+
b_buddys.each do |contact|
|
261
|
+
puts "[" + contact[0] + "," + contact[1] + "]"
|
262
|
+
end
|
263
|
+
return "Done"
|
264
|
+
end
|
265
|
+
|
266
|
+
#Check if the user have a roster
|
267
|
+
def checkUser(user)
|
268
|
+
return getAllUsersWithRoster().include?(user)
|
269
|
+
end
|
270
|
+
|
271
|
+
def checkUserInRoster(user,roster)
|
272
|
+
return getBuddysFromRoster(roster).include?(user)
|
273
|
+
end
|
274
|
+
|
275
|
+
def checkBidirecctionalBuddys(userASid,userBSid)
|
276
|
+
userA = userASid.split("@")[0]
|
277
|
+
userB = userBSid.split("@")[0]
|
278
|
+
rosterA = getRoster(userA)
|
279
|
+
rosterB = getRoster(userB)
|
280
|
+
return (checkUserInRoster(userA,rosterB) and checkUserInRoster(userB,rosterA))
|
281
|
+
end
|
282
|
+
|
283
|
+
|
284
|
+
#Manage stanzas Utilities
|
285
|
+
|
131
286
|
def sendStanzaUserMessage(username,msg)
|
132
287
|
resource = getUserResource(username);
|
133
288
|
stanza = "\\<\\'message\\'\\>\\<\\'body\\'\\>\\'" + msg + "\\'\\<\\'/body\\'\\>\\<\\'/message\\'\\>"
|
@@ -137,17 +292,16 @@ def sendStanzaUserMessage(username,msg)
|
|
137
292
|
return "Done"
|
138
293
|
end
|
139
294
|
|
140
|
-
|
141
|
-
|
142
|
-
sendPresenceWithShow(username,username,show)
|
295
|
+
def setPresence(username)
|
296
|
+
sendPresenceStanzaWithType(username,username,"available")
|
143
297
|
end
|
144
298
|
|
145
299
|
def unsetPresence(username)
|
146
300
|
sendPresenceStanzaWithType(username,username,"unavailable")
|
147
301
|
end
|
148
302
|
|
149
|
-
def
|
150
|
-
|
303
|
+
def sendPresence(username,show)
|
304
|
+
sendPresenceWithShow(username,username,show)
|
151
305
|
end
|
152
306
|
|
153
307
|
def sendPresenceWithShow(from_name,to_name,show)
|
@@ -198,6 +352,22 @@ def getUserResource(username)
|
|
198
352
|
return username + " no have any active session"
|
199
353
|
end
|
200
354
|
|
355
|
+
|
356
|
+
#More utilities
|
357
|
+
|
358
|
+
def isEjabberdNodeStarted
|
359
|
+
command = "ejabberdctl status"
|
360
|
+
output = %x[#{command}]
|
361
|
+
if firstLine = output.split("\n")[0]
|
362
|
+
return ((firstLine.split(":")[1]).strip()=="started")
|
363
|
+
end
|
364
|
+
return false
|
365
|
+
end
|
366
|
+
|
367
|
+
|
368
|
+
|
369
|
+
#Help & Support methods
|
370
|
+
|
201
371
|
def help
|
202
372
|
log("Command list")
|
203
373
|
SYNTAX_FOR_COMMANDS.values.each do |command|
|
@@ -206,6 +376,10 @@ def help
|
|
206
376
|
puts ""
|
207
377
|
end
|
208
378
|
|
379
|
+
|
380
|
+
|
381
|
+
#Main thread
|
382
|
+
|
209
383
|
log("Init Ejabberd Maintenance script")
|
210
384
|
|
211
385
|
begin
|
@@ -235,15 +409,16 @@ begin
|
|
235
409
|
end
|
236
410
|
puts ""
|
237
411
|
else
|
238
|
-
|
239
|
-
|
412
|
+
puts "Error: Params required for command " + (ARGV[0]).to_s() + ": " + (PARAMS_FOR_COMMANDS[ARGV[0]]).to_s()
|
413
|
+
puts "Syntax for command " + (ARGV[0]).to_s() + "\n" + (SYNTAX_FOR_COMMANDS[ARGV[0]]).to_s()
|
414
|
+
puts "Use 'help' to get information about command syntax"
|
240
415
|
end
|
241
416
|
else
|
242
|
-
|
243
|
-
|
244
|
-
log("Use 'help' to get information about command syntax")
|
417
|
+
puts "Error: Command not recognized"
|
418
|
+
puts "Use 'help' to get information about command syntax"
|
245
419
|
end
|
246
420
|
rescue
|
247
|
-
puts "
|
421
|
+
puts "Syntax error"
|
422
|
+
puts "Use 'help' to get information about command syntax"
|
248
423
|
end
|
249
424
|
|
Binary file
|
@@ -6,6 +6,7 @@ module SocialStream
|
|
6
6
|
|
7
7
|
included do
|
8
8
|
after_create :save_buddy
|
9
|
+
after_destroy :remove_buddy
|
9
10
|
end
|
10
11
|
|
11
12
|
module InstanceMethods
|
@@ -42,6 +43,38 @@ module SocialStream
|
|
42
43
|
|
43
44
|
end
|
44
45
|
|
46
|
+
|
47
|
+
def remove_buddy
|
48
|
+
|
49
|
+
unless SocialStream::Presence.enable
|
50
|
+
return
|
51
|
+
end
|
52
|
+
|
53
|
+
unless self.receiver.subject_type == "User" and self.sender.subject_type == "User"
|
54
|
+
return
|
55
|
+
end
|
56
|
+
|
57
|
+
#XMPP DOMAIN
|
58
|
+
domain = SocialStream::Presence.domain
|
59
|
+
user_sid = self.sender.slug + "@" + domain
|
60
|
+
user_name = self.sender.name
|
61
|
+
buddy_sid = self.receiver.slug + "@" + domain
|
62
|
+
buddy_name = self.receiver.name
|
63
|
+
|
64
|
+
#Check if is a positive and replied tie
|
65
|
+
if self.bidirectional?
|
66
|
+
#Execute unsetRosterForBidirectionalTie(user_sid,oldfriend_sid,oldfriendNick,oldfriendGroup)
|
67
|
+
SocialStream::Presence::XmppServerOrder::unsetRosterForBidirectionalTie(user_sid,buddy_sid,buddy_name,"SocialStream")
|
68
|
+
elsif self.positive?
|
69
|
+
#Case: Possitive tie unidirectional
|
70
|
+
#Execute removeBuddyFromRoster(user_sid,buddy_sid)
|
71
|
+
SocialStream::Presence::XmppServerOrder::removeBuddyFromRoster(user_sid,buddy_sid)
|
72
|
+
else
|
73
|
+
return
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
45
78
|
end
|
46
79
|
end
|
47
80
|
end
|
@@ -20,13 +20,33 @@ module SocialStream
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
def
|
23
|
+
def unsetRosterForBidirectionalTie(userSid,oldfriendSid,oldfriendNick,oldfriendGroup)
|
24
|
+
if SocialStream::Presence.remote_xmpp_server
|
25
|
+
puts "Not implemented unsetRosterForBidirectionalTie(user_sid,oldfriend_sid,oldfriendNick,oldfriendGroup) for remote_xmpp_server"
|
26
|
+
return
|
27
|
+
else
|
28
|
+
#SocialStream::Presence.remote_xmpp_server=false
|
29
|
+
executeEmanagementLocalCommand("unsetBidireccionalBuddys",[userSid,oldfriendSid,oldfriendNick,oldfriendGroup])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def addBuddyToRoster(userSid,buddySid,buddyNick,buddyGroup,subscription_type)
|
24
34
|
if SocialStream::Presence.remote_xmpp_server
|
25
35
|
puts "Not implemented addBuddyToRoster(userSID,buddySID,buddyNick,buddyGroup,subscription_type) for remote_xmpp_server"
|
26
36
|
return
|
27
37
|
else
|
28
38
|
#SocialStream::Presence.remote_xmpp_server=false
|
29
|
-
executeEmanagementLocalCommand("addBuddyToRoster",[
|
39
|
+
executeEmanagementLocalCommand("addBuddyToRoster",[userSid,buddySid,buddyNick,buddyGroup,subscription_type])
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def removeBuddyFromRoster(userSid,buddySid)
|
44
|
+
if SocialStream::Presence.remote_xmpp_server
|
45
|
+
puts "Not implemented removeBuddyFromRoster(userSid,buddySid) for remote_xmpp_server"
|
46
|
+
return
|
47
|
+
else
|
48
|
+
#SocialStream::Presence.remote_xmpp_server=false
|
49
|
+
executeEmanagementLocalCommand("removeBuddyFromRoster",[userSid,buddySid])
|
30
50
|
end
|
31
51
|
end
|
32
52
|
|
@@ -50,18 +70,27 @@ module SocialStream
|
|
50
70
|
else
|
51
71
|
#SocialStream::Presence.remote_xmpp_server=false
|
52
72
|
|
53
|
-
#Get connected users locally
|
54
|
-
|
55
|
-
|
56
|
-
|
73
|
+
#Get connected users locally
|
74
|
+
output = executeEmanagementLocalCommand("isEjabberdNodeStarted",[])
|
75
|
+
nodeUp = output.split("\n")[3]
|
76
|
+
|
77
|
+
if nodeUp and nodeUp.strip() == "true"
|
78
|
+
users = []
|
79
|
+
output = %x[ejabberdctl connected-users]
|
80
|
+
sessions = output.split("\n")
|
57
81
|
|
58
|
-
|
59
|
-
|
60
|
-
|
82
|
+
sessions.each do |session|
|
83
|
+
users << session.split("@")[0]
|
84
|
+
puts session.split("@")[0]
|
85
|
+
end
|
86
|
+
|
87
|
+
synchronize_presence_for_slugs(users)
|
88
|
+
|
89
|
+
else
|
90
|
+
reset_presence
|
91
|
+
return "Xmpp Server Down: Reset Connected Users"
|
61
92
|
end
|
62
93
|
|
63
|
-
synchronize_presence_for_slugs(users)
|
64
|
-
|
65
94
|
end
|
66
95
|
end
|
67
96
|
|
@@ -170,8 +199,8 @@ module SocialStream
|
|
170
199
|
command = command + " " + param.split(" ")[0]
|
171
200
|
end
|
172
201
|
puts "Executing " + command
|
173
|
-
|
174
|
-
|
202
|
+
output = %x[#{command}];
|
203
|
+
return output
|
175
204
|
end
|
176
205
|
|
177
206
|
end
|
data/social_stream.gemspec
CHANGED
@@ -11,9 +11,9 @@ 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.9.
|
15
|
-
s.add_runtime_dependency('social_stream-documents', '~> 0.4.
|
16
|
-
s.add_runtime_dependency('social_stream-events', '~> 0.0.
|
14
|
+
s.add_runtime_dependency('social_stream-base', '~> 0.9.24')
|
15
|
+
s.add_runtime_dependency('social_stream-documents', '~> 0.4.1')
|
16
|
+
s.add_runtime_dependency('social_stream-events', '~> 0.0.16')
|
17
17
|
|
18
18
|
# Development Gem dependencies
|
19
19
|
#
|
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:
|
4
|
+
hash: 45
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 12
|
9
|
-
-
|
10
|
-
version: 0.12.
|
9
|
+
- 1
|
10
|
+
version: 0.12.1
|
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-10-
|
19
|
+
date: 2011-10-31 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:
|
30
|
+
hash: 11
|
31
31
|
segments:
|
32
32
|
- 0
|
33
33
|
- 9
|
34
|
-
-
|
35
|
-
version: 0.9.
|
34
|
+
- 24
|
35
|
+
version: 0.9.24
|
36
36
|
type: :runtime
|
37
37
|
version_requirements: *id001
|
38
38
|
- !ruby/object:Gem::Dependency
|
@@ -43,12 +43,12 @@ dependencies:
|
|
43
43
|
requirements:
|
44
44
|
- - ~>
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
hash:
|
46
|
+
hash: 13
|
47
47
|
segments:
|
48
48
|
- 0
|
49
49
|
- 4
|
50
|
-
-
|
51
|
-
version: 0.4.
|
50
|
+
- 1
|
51
|
+
version: 0.4.1
|
52
52
|
type: :runtime
|
53
53
|
version_requirements: *id002
|
54
54
|
- !ruby/object:Gem::Dependency
|
@@ -59,12 +59,12 @@ dependencies:
|
|
59
59
|
requirements:
|
60
60
|
- - ~>
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
hash:
|
62
|
+
hash: 63
|
63
63
|
segments:
|
64
64
|
- 0
|
65
65
|
- 0
|
66
|
-
-
|
67
|
-
version: 0.0.
|
66
|
+
- 16
|
67
|
+
version: 0.0.16
|
68
68
|
type: :runtime
|
69
69
|
version_requirements: *id003
|
70
70
|
- !ruby/object:Gem::Dependency
|
@@ -860,7 +860,6 @@ files:
|
|
860
860
|
- documents/app/assets/stylesheets/show.css.scss
|
861
861
|
- documents/app/assets/stylesheets/social_stream-documents.css
|
862
862
|
- documents/app/controllers/audios_controller.rb
|
863
|
-
- documents/app/controllers/common_documents_controller.rb
|
864
863
|
- documents/app/controllers/documents_controller.rb
|
865
864
|
- documents/app/controllers/pictures_controller.rb
|
866
865
|
- documents/app/controllers/videos_controller.rb
|
@@ -882,9 +881,10 @@ files:
|
|
882
881
|
- documents/app/views/audios/index.html.erb
|
883
882
|
- documents/app/views/audios/index.js.erb
|
884
883
|
- documents/app/views/audios/show.html.erb
|
885
|
-
- documents/app/views/
|
886
|
-
- documents/app/views/
|
887
|
-
- documents/app/views/
|
884
|
+
- documents/app/views/common/_document_info.html.erb
|
885
|
+
- documents/app/views/common/_edit_form.html.erb
|
886
|
+
- documents/app/views/common/_index.html.erb
|
887
|
+
- documents/app/views/common/_show.html.erb
|
888
888
|
- documents/app/views/documents/_document.html.erb
|
889
889
|
- documents/app/views/documents/_document_focus_search.html.erb
|
890
890
|
- documents/app/views/documents/_document_global_search.html.erb
|
@@ -1,45 +0,0 @@
|
|
1
|
-
class CommonDocumentsController < InheritedResources::Base
|
2
|
-
respond_to :html, :js
|
3
|
-
|
4
|
-
belongs_to_subjects :optional => true
|
5
|
-
|
6
|
-
before_filter :profile_subject!, :only => :index
|
7
|
-
|
8
|
-
load_and_authorize_resource :except => :index
|
9
|
-
|
10
|
-
|
11
|
-
def show
|
12
|
-
respond_to do |format|
|
13
|
-
format.html {render :action => :show}
|
14
|
-
format.all {
|
15
|
-
path = resource.file.path(params[:style] || params[:format])
|
16
|
-
|
17
|
-
send_file path,
|
18
|
-
:filename => resource.file_file_name,
|
19
|
-
:disposition => "inline"
|
20
|
-
}
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def destroy
|
25
|
-
@post_activity = resource.post_activity
|
26
|
-
|
27
|
-
destroy!
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def collection
|
33
|
-
@activities = profile_subject.wall(:profile,
|
34
|
-
:for => current_subject,
|
35
|
-
:object_type => Array(self.class.index_object_type)).
|
36
|
-
page(params[:page]).
|
37
|
-
per(params[:per])
|
38
|
-
end
|
39
|
-
|
40
|
-
class << self
|
41
|
-
def index_object_type
|
42
|
-
controller_name.classify
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|