Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/diaspora/diaspora.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog.md1
-rw-r--r--app/assets/javascripts/app/pages/settings.js5
-rw-r--r--app/controllers/users_controller.rb15
-rw-r--r--app/helpers/aspect_global_helper.rb15
-rw-r--r--app/helpers/interim_stream_hackiness_helper.rb4
-rw-r--r--app/helpers/publisher_helper.rb4
-rw-r--r--app/models/user.rb18
-rw-r--r--app/views/aspects/_aspect_dropdown.html.haml48
-rw-r--r--app/views/publisher/_aspect_dropdown.html.haml38
-rw-r--r--app/views/publisher/_publisher.html.haml6
-rw-r--r--app/views/users/_edit.haml1
-rw-r--r--app/views/users/_post_default.html.haml12
-rw-r--r--app/views/users/_post_default.mobile.haml1
-rw-r--r--config/locales/diaspora/en.yml1
-rw-r--r--db/migrate/20160829170244_add_post_default_to_aspects.rb6
-rw-r--r--db/schema.rb2
-rw-r--r--features/desktop/change_settings.feature24
-rw-r--r--features/step_definitions/aspects_steps.rb6
-rw-r--r--lib/stream/base.rb4
-rw-r--r--lib/stream/multi.rb2
-rw-r--r--lib/stream/public.rb5
-rw-r--r--spec/lib/stream/multi_spec.rb2
-rw-r--r--spec/models/user_spec.rb50
23 files changed, 190 insertions, 80 deletions
diff --git a/Changelog.md b/Changelog.md
index 1dcc5b9bc..d91522834 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -49,6 +49,7 @@ Note: Although this is a minor release, the configuration file changed because t
* Add optional `Content-Security-Policy` header [#7128](https://github.com/diaspora/diaspora/pull/7128)
* Add links to main stream and public stream to the mobile drawer [#7144](https://github.com/diaspora/diaspora/pull/7144)
* Allow opening search results from the dropdown in a new tab [#7021](https://github.com/diaspora/diaspora/issues/7021)
+* Add user setting for default post visibility [#7118](https://github.com/diaspora/diaspora/issues/7118)
# 0.6.0.1
diff --git a/app/assets/javascripts/app/pages/settings.js b/app/assets/javascripts/app/pages/settings.js
index 725abbedc..3bbfaeb6a 100644
--- a/app/assets/javascripts/app/pages/settings.js
+++ b/app/assets/javascripts/app/pages/settings.js
@@ -9,6 +9,11 @@ app.pages.Settings = Backbone.View.extend({
preFill: gon.preloads.tagsArray
});
new Diaspora.ProfilePhotoUploader();
+
+ this.viewAspectSelector = new app.views.PublisherAspectSelector({
+ el: $(".aspect_dropdown"),
+ form: $("#post-default-aspects")
+ });
}
});
// @license-end
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index b13dd822c..8e01dff62 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -144,6 +144,7 @@ class UsersController < ApplicationController
:auto_follow_back,
:auto_follow_back_aspect_id,
:getting_started,
+ :post_default_public,
email_preferences: %i(
someone_reported
also_commented
@@ -167,6 +168,8 @@ class UsersController < ApplicationController
change_email(user_data)
elsif user_data[:auto_follow_back]
change_settings(user_data, "users.update.follow_settings_changed", "users.update.follow_settings_not_changed")
+ elsif user_data[:post_default_public]
+ change_post_default(user_data)
elsif user_data[:color_theme]
change_settings(user_data, "users.update.color_theme_changed", "users.update.color_theme_not_changed")
else
@@ -184,6 +187,18 @@ class UsersController < ApplicationController
end
end
+ def change_post_default(user_data)
+ # by default user_data[:post_default_public] is set to false
+ case params[:aspect_ids].try(:first)
+ when "public"
+ user_data[:post_default_public] = true
+ when "all_aspects"
+ params[:aspect_ids] = @user.aspects.map {|a| a.id.to_s }
+ end
+ @user.update_post_default_aspects params[:aspect_ids].to_a
+ change_settings(user_data)
+ end
+
# change email notifications
def change_email_preferences(user_data)
@user.update_user_preferences(user_data[:email_preferences])
diff --git a/app/helpers/aspect_global_helper.rb b/app/helpers/aspect_global_helper.rb
index 421215b7d..d495072d9 100644
--- a/app/helpers/aspect_global_helper.rb
+++ b/app/helpers/aspect_global_helper.rb
@@ -17,13 +17,24 @@ module AspectGlobalHelper
aspect = stream.aspect
aspect_ids = stream.aspect_ids
elsif current_user
- aspects = current_user.aspects
+ aspects = current_user.post_default_aspects
aspect = aspects.first
aspect_ids = current_user.aspect_ids
else
return {}
end
+ {selected_aspects: aspects, aspect: aspect, aspect_ids: aspect_ids}
+ end
+
+ def public_selected?(selected_aspects)
+ "public" == selected_aspects.try(:first)
+ end
+
+ def all_aspects_selected?(aspects, selected_aspects)
+ !aspects.empty? && aspects.size == selected_aspects.size && !public_selected?(selected_aspects)
+ end
- { selected_aspects: aspects, aspect: aspect, aspect_ids: aspect_ids }
+ def aspect_selected?(aspect, aspects, selected_aspects)
+ selected_aspects.include?(aspect) && !all_aspects_selected?(aspects, selected_aspects)
end
end
diff --git a/app/helpers/interim_stream_hackiness_helper.rb b/app/helpers/interim_stream_hackiness_helper.rb
index c5d6992ab..78a893143 100644
--- a/app/helpers/interim_stream_hackiness_helper.rb
+++ b/app/helpers/interim_stream_hackiness_helper.rb
@@ -46,8 +46,4 @@ module InterimStreamHackinessHelper
def publisher_open
publisher_method(:open)
end
-
- def publisher_public
- publisher_method(:public)
- end
end
diff --git a/app/helpers/publisher_helper.rb b/app/helpers/publisher_helper.rb
index 1e7e326a9..ba4bc1d37 100644
--- a/app/helpers/publisher_helper.rb
+++ b/app/helpers/publisher_helper.rb
@@ -7,10 +7,6 @@ module PublisherHelper
params[:controller] != "tags"
end
- def all_aspects_selected?(selected_aspects)
- @all_aspects_selected ||= all_aspects.size == selected_aspects.size
- end
-
def service_button(service)
provider_title = I18n.t(
"services.index.share_to",
diff --git a/app/models/user.rb b/app/models/user.rb
index 2b32a3622..77cdd8d21 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -252,6 +252,21 @@ class User < ActiveRecord::Base
end
end
+ def post_default_aspects
+ if post_default_public
+ ["public"]
+ else
+ aspects.where(post_default: true).to_a
+ end
+ end
+
+ def update_post_default_aspects(post_default_aspect_ids)
+ aspects.each do |aspect|
+ enable = post_default_aspect_ids.include?(aspect.id.to_s)
+ aspect.update_attribute(:post_default, enable)
+ end
+ end
+
def salmon(post)
Salmon::EncryptedSlap.create_by_user_and_activity(self, post.to_diaspora_xml)
end
@@ -502,7 +517,8 @@ class User < ActiveRecord::Base
self[field] = nil
end
[:getting_started,
- :show_community_spotlight_in_stream].each do |field|
+ :show_community_spotlight_in_stream,
+ :post_default_public].each do |field|
self[field] = false
end
self[:disable_mail] = true
diff --git a/app/views/aspects/_aspect_dropdown.html.haml b/app/views/aspects/_aspect_dropdown.html.haml
new file mode 100644
index 000000000..6199d4b1e
--- /dev/null
+++ b/app/views/aspects/_aspect_dropdown.html.haml
@@ -0,0 +1,48 @@
+-# locals: selected_aspects. Note: all_aspects is a global in the ApplicationController
+:ruby
+ dropdown_css = {"data-toggle" => "dropdown"}
+ if current_user.getting_started?
+ dropdown_css[:title] = popover_with_close_html("2. #{t('shared.public_explain.control_your_audience')}")
+ dropdown_css["data-content"] = t("shared.public_explain.visibility_dropdown")
+ end
+
+.btn-group.aspect_dropdown
+ %button.btn.btn-default.dropdown-toggle{dropdown_css}
+ - if public_selected?(selected_aspects)
+ %i.entypo-globe.small#visibility-icon
+ %span.text
+ = t("public")
+ - else
+ %i.entypo-lock.small#visibility-icon
+ %span.text
+ - if all_aspects_selected?(all_aspects, selected_aspects)
+ = t("all_aspects")
+ - elsif selected_aspects.size == 1
+ = selected_aspects.first.name
+ - else
+ = t("shared.aspect_dropdown.toggle", count: selected_aspects.size)
+ %span.caret
+ %ul.dropdown-menu.pull-right{unSelectable: "on"}
+
+ %li.public.radio{"data-aspect_id" => "public", :class => ("selected" if public_selected?(selected_aspects))}
+ %a
+ %span.status_indicator
+ %i.glyphicon.glyphicon-ok
+ %span.text
+ = t("public")
+ %li.all_aspects.radio{"data-aspect_id" => "all_aspects",
+ :class => ("selected" if all_aspects_selected?(all_aspects, selected_aspects))}
+ %a
+ %span.status_indicator
+ %i.glyphicon.glyphicon-ok
+ %span.text
+ = t("all_aspects")
+ %li.divider
+ - all_aspects.each do |aspect|
+ %li.aspect_selector{"data-aspect_id" => aspect.id,
+ :class => ("selected" if aspect_selected?(aspect, all_aspects, selected_aspects))}
+ %a
+ %span.status_indicator
+ %i.glyphicon.glyphicon-ok
+ %span.text
+ = aspect.name
diff --git a/app/views/publisher/_aspect_dropdown.html.haml b/app/views/publisher/_aspect_dropdown.html.haml
deleted file mode 100644
index e97e50426..000000000
--- a/app/views/publisher/_aspect_dropdown.html.haml
+++ /dev/null
@@ -1,38 +0,0 @@
-.btn-group.aspect_dropdown
- %button.btn.btn-default.dropdown-toggle{ ! current_user.getting_started? ? {'data-toggle' => 'dropdown'} : {'data-toggle' => 'dropdown', title: popover_with_close_html("2. #{t('shared.public_explain.control_your_audience')}"), 'data-content'=> t('shared.public_explain.visibility_dropdown')} }
- - if publisher_public
- %i#visibility-icon.entypo-globe.small
- %span.text
- = t('public')
- - else
- %i#visibility-icon.entypo-lock.small
- %span.text
- - if all_aspects_selected?(selected_aspects)
- = t('all_aspects')
- - elsif selected_aspects.size == 1
- = selected_aspects.first.name
- - else
- = t('shared.aspect_dropdown.toggle', count: selected_aspects.size)
- %span.caret
- %ul.dropdown-menu.pull-right{ unSelectable: 'on' }
-
- %li.public.radio{"data-aspect_id" => "public", class: ("selected" if publisher_public)}
- %a
- %span.status_indicator
- %i.glyphicon.glyphicon-ok
- %span.text
- = t('public')
- %li.all_aspects.radio{"data-aspect_id" => "all_aspects", class: ("selected" if (!publisher_public && all_aspects_selected?(selected_aspects)))}
- %a
- %span.status_indicator
- %i.glyphicon.glyphicon-ok
- %span.text
- = t('all_aspects')
- %li.divider
- - for aspect in all_aspects
- %li.aspect_selector{ 'data-aspect_id' => aspect.id, class: !all_aspects_selected?(selected_aspects) && selected_aspects.include?(aspect) ? "selected" : "" }
- %a
- %span.status_indicator
- %i.glyphicon.glyphicon-ok
- %span.text
- = aspect.name
diff --git a/app/views/publisher/_publisher.html.haml b/app/views/publisher/_publisher.html.haml
index 5e1ca38f1..d71b1e27f 100644
--- a/app/views/publisher/_publisher.html.haml
+++ b/app/views/publisher/_publisher.html.haml
@@ -40,9 +40,9 @@
!= t("shared.publisher.formatWithMarkdown", markdown_link: link_to(t("help.markdown"),
"https://diasporafoundation.org/formatting", target: :blank))
- - if publisher_public
+ - if public_selected?(selected_aspects)
= hidden_field_tag "aspect_ids[]", "public"
- - elsif all_aspects_selected?(selected_aspects)
+ - elsif all_aspects_selected?(all_aspects, selected_aspects)
= hidden_field_tag "aspect_ids[]", "all_aspects"
- else
- for aspect_id in aspect_ids
@@ -54,7 +54,7 @@
.options_and_submit.col-sm-12
.public_toggle.clearfix
.btn-toolbar.pull-right
- = render partial: "publisher/aspect_dropdown", locals: {selected_aspects: selected_aspects}
+ = render partial: "aspects/aspect_dropdown", locals: {selected_aspects: selected_aspects}
%button.btn.btn-group.btn-primary#submit= t("shared.publisher.share")
.btn-toolbar.pull-right#publisher-service-icons
diff --git a/app/views/users/_edit.haml b/app/views/users/_edit.haml
index aec5eccc7..af9aea49b 100644
--- a/app/views/users/_edit.haml
+++ b/app/views/users/_edit.haml
@@ -115,6 +115,7 @@
.clearfix= f.submit t(".change"), class: "btn btn-primary pull-right"
%hr
+ = render partial: "post_default"
.row
.col-md-12
diff --git a/app/views/users/_post_default.html.haml b/app/views/users/_post_default.html.haml
new file mode 100644
index 000000000..8f5fd8eb3
--- /dev/null
+++ b/app/views/users/_post_default.html.haml
@@ -0,0 +1,12 @@
+.row
+ .col-md-12
+ %h3
+ = t("users.edit.default_post_visibility")
+ = form_for current_user, url: edit_user_path,
+ html: {method: :put, id: "post-default-aspects", class: "form-horizontal"} do |f|
+ = f.hidden_field :post_default_public, value: false
+ - selected_aspects = current_user.post_default_aspects
+ = render partial: "aspects/aspect_dropdown", locals: {selected_aspects: selected_aspects}
+ .small-horizontal-spacer
+ .clearfix= f.submit t("users.edit.change"), class: "btn btn-primary pull-right"
+%hr
diff --git a/app/views/users/_post_default.mobile.haml b/app/views/users/_post_default.mobile.haml
new file mode 100644
index 000000000..736458a9a
--- /dev/null
+++ b/app/views/users/_post_default.mobile.haml
@@ -0,0 +1 @@
+-# This feature is not supported in mobile format.
diff --git a/config/locales/diaspora/en.yml b/config/locales/diaspora/en.yml
index 8e5b8aef9..cdff0411b 100644
--- a/config/locales/diaspora/en.yml
+++ b/config/locales/diaspora/en.yml
@@ -1156,6 +1156,7 @@ en:
following: "Sharing settings"
auto_follow_back: "Automatically share with users who start sharing with you"
auto_follow_aspect: "Aspect for users you automatically share with:"
+ default_post_visibility: "Default aspects selected for posting"
receive_email_notifications: "Receive email notifications when:"
started_sharing: "someone starts sharing with you"
someone_reported: "someone sends a report"
diff --git a/db/migrate/20160829170244_add_post_default_to_aspects.rb b/db/migrate/20160829170244_add_post_default_to_aspects.rb
new file mode 100644
index 000000000..dcc2d76c6
--- /dev/null
+++ b/db/migrate/20160829170244_add_post_default_to_aspects.rb
@@ -0,0 +1,6 @@
+class AddPostDefaultToAspects < ActiveRecord::Migration
+ def change
+ add_column :aspects, :post_default, :boolean, default: true
+ add_column :users, :post_default_public, :boolean, default: false
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index d18815df9..48a75a864 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -48,6 +48,7 @@ ActiveRecord::Schema.define(version: 20160906225138) do
t.boolean "contacts_visible", default: true, null: false
t.integer "order_id", limit: 4
t.boolean "chat_enabled", default: false
+ t.boolean "post_default", default: true
end
add_index "aspects", ["user_id", "contacts_visible"], name: "index_aspects_on_user_id_and_contacts_visible", using: :btree
@@ -634,6 +635,7 @@ ActiveRecord::Schema.define(version: 20160906225138) do
t.datetime "exported_photos_at"
t.boolean "exporting_photos", default: false
t.string "color_theme", limit: 255
+ t.boolean "post_default_public", default: false
end
add_index "users", ["authentication_token"], name: "index_users_on_authentication_token", unique: true, using: :btree
diff --git a/features/desktop/change_settings.feature b/features/desktop/change_settings.feature
index f636e29ce..ba0543908 100644
--- a/features/desktop/change_settings.feature
+++ b/features/desktop/change_settings.feature
@@ -3,6 +3,9 @@ Feature: Change settings
Background:
Given I am signed in
+ And I have following aspects:
+ | Friends |
+ | Family |
When I go to the edit user page
Scenario: Change my email
@@ -25,3 +28,24 @@ Feature: Change settings
And I press "Change language"
Then I should see "Język został zmieniony"
And "polski" should be selected from "user_language"
+
+ Scenario: Change my post default aspects
+ When I go to the stream page
+ And I expand the publisher
+ Then I should see "All aspects" within ".aspect_dropdown"
+ When I go to the edit user page
+ And I press the aspect dropdown
+ And I toggle the aspect "Family"
+ And I press the aspect dropdown
+ And I press "Change" within "#post-default-aspects"
+ And I go to the stream page
+ And I expand the publisher
+ Then I should see "Family" within ".aspect_dropdown"
+
+ Scenario: Change my post default to public
+ When I press the aspect dropdown
+ And I toggle the aspect "Public"
+ And I press "Change" within "#post-default-aspects"
+ And I go to the stream page
+ And I expand the publisher
+ Then I should see "Public" within ".aspect_dropdown"
diff --git a/features/step_definitions/aspects_steps.rb b/features/step_definitions/aspects_steps.rb
index 473ab2ab2..bcfa6b37c 100644
--- a/features/step_definitions/aspects_steps.rb
+++ b/features/step_definitions/aspects_steps.rb
@@ -4,7 +4,11 @@ module AspectCukeHelpers
end
def toggle_aspect(a_name)
- a_id = @me.aspects.where(name: a_name).pluck(:id).first
+ a_id = if "Public" == a_name
+ "public"
+ else
+ @me.aspects.where(name: a_name).pluck(:id).first
+ end
aspect_css = ".aspect_dropdown li[data-aspect_id='#{a_id}']"
expect(page).to have_selector(aspect_css)
find(aspect_css).click
diff --git a/lib/stream/base.rb b/lib/stream/base.rb
index f593169f2..0d705469f 100644
--- a/lib/stream/base.rb
+++ b/lib/stream/base.rb
@@ -62,7 +62,7 @@ class Stream::Base
#NOTE: MBS bad bad methods the fact we need these means our views are foobared. please kill them and make them
#private methods on the streams that need them
def aspects
- user.aspects
+ user.post_default_aspects
end
# @return [Aspect] The first aspect in #aspects
@@ -71,7 +71,7 @@ class Stream::Base
end
def aspect_ids
- aspects.map{|x| x.id}
+ aspects.map {|x| x.try(:id) }
end
def max_time=(time_string)
diff --git a/lib/stream/multi.rb b/lib/stream/multi.rb
index 868a82228..7a7d6cc2a 100644
--- a/lib/stream/multi.rb
+++ b/lib/stream/multi.rb
@@ -28,7 +28,7 @@ class Stream::Multi < Stream::Base
if welcome?
{open: true, prefill: publisher_prefill, public: true}
else
- super
+ {public: user.post_default_public}
end
end
diff --git a/lib/stream/public.rb b/lib/stream/public.rb
index 0c6987233..b0285f4a8 100644
--- a/lib/stream/public.rb
+++ b/lib/stream/public.rb
@@ -19,4 +19,9 @@ class Stream::Public < Stream::Base
def can_comment?(post)
post.author.local?
end
+
+ # Override base class method
+ def aspects
+ ["public"]
+ end
end
diff --git a/spec/lib/stream/multi_spec.rb b/spec/lib/stream/multi_spec.rb
index 8f84caf54..b53ee384c 100644
--- a/spec/lib/stream/multi_spec.rb
+++ b/spec/lib/stream/multi_spec.rb
@@ -32,7 +32,7 @@ describe Stream::Multi do
it 'provides no opts if welcome? is not set' do
prefill_text = "sup?"
allow(@stream).to receive(:welcome?).and_return(false)
- expect(@stream.send(:publisher_opts)).to eq({})
+ expect(@stream.send(:publisher_opts)).to eq(public: false)
end
end
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index eaaaf6caf..80ab08d40 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -931,42 +931,46 @@ describe User, :type => :model do
end
end
- it 'disables mail' do
+ it "disables mail" do
@user.disable_mail = false
@user.clear_account!
expect(@user.reload.disable_mail).to be true
end
- it 'sets getting_started and show_community_spotlight_in_stream fields to false' do
+ it "sets getting_started and show_community_spotlight_in_stream and post_default_public fields to false" do
@user.clear_account!
expect(@user.reload.getting_started).to be false
expect(@user.reload.show_community_spotlight_in_stream).to be false
+ expect(@user.reload.post_default_public).to be false
end
end
describe "#clearable_attributes" do
- it 'returns the clearable fields' do
+ it "returns the clearable fields" do
user = FactoryGirl.create :user
- expect(user.send(:clearable_fields).sort).to eq(%w(
- language
- reset_password_sent_at
- reset_password_token
- remember_created_at
- sign_in_count
- current_sign_in_at
- last_sign_in_at
- current_sign_in_ip
- hidden_shareables
- last_sign_in_ip
- invited_by_id
- authentication_token
- auto_follow_back
- auto_follow_back_aspect_id
- unconfirmed_email
- confirm_email_token
- last_seen
- color_theme
- ).sort)
+ expect(user.send(:clearable_fields)).to match_array(
+ %w(
+ language
+ reset_password_sent_at
+ reset_password_token
+ remember_created_at
+ sign_in_count
+ current_sign_in_at
+ last_sign_in_at
+ current_sign_in_ip
+ hidden_shareables
+ last_sign_in_ip
+ invited_by_id
+ authentication_token
+ auto_follow_back
+ auto_follow_back_aspect_id
+ unconfirmed_email
+ confirm_email_token
+ last_seen
+ color_theme
+ post_default_public
+ )
+ )
end
end
end