a user can mark themselves as nsfw

This commit is contained in:
Dennis Collinson 2012-01-27 16:48:41 -08:00
parent efd99344eb
commit 558ceec92a
15 changed files with 122 additions and 63 deletions

View file

@ -22,9 +22,40 @@ class ProfilesController < ApplicationController
def update def update
# upload and set new profile photo # upload and set new profile photo
params[:profile] ||= {} @profile_attrs = params[:profile] || {}
unless params[:profile][:tag_string].nil? || params[:profile][:tag_string] == I18n.t('profiles.edit.your_tags_placeholder')
params[:profile][:tag_string].split( " " ).each do |extra_tag| munge_tag_string
@profile_attrs[:searchable] ||= false
if params[:photo_id]
@profile_attrs[:photo] = Photo.where(:author_id => current_user.person.id, :id => params[:photo_id]).first
end
if current_user.update_profile(@profile_attrs)
flash[:notice] = I18n.t 'profiles.update.updated'
else
flash[:error] = I18n.t 'profiles.update.failed'
end
respond_to do |format|
format.js { render :nothing => true, :status => 200 }
format.html {
flash[:notice] = I18n.t 'profiles.update.updated'
if current_user.getting_started?
redirect_to getting_started_path
else
redirect_to edit_profile_path
end
}
end
end
protected
def munge_tag_string
unless @profile_attrs[:tag_string].nil? || @profile_attrs[:tag_string] == I18n.t('profiles.edit.your_tags_placeholder')
@profile_attrs[:tag_string].split( " " ).each do |extra_tag|
extra_tag.strip! extra_tag.strip!
unless extra_tag == "" unless extra_tag == ""
extra_tag = "##{extra_tag}" unless extra_tag.start_with?( "#" ) extra_tag = "##{extra_tag}" unless extra_tag.start_with?( "#" )
@ -32,38 +63,6 @@ class ProfilesController < ApplicationController
end end
end end
end end
params[:profile][:tag_string] = (params[:tags]) ? params[:tags].gsub(',',' ') : "" @profile_attrs[:tag_string] = (params[:tags]) ? params[:tags].gsub(',',' ') : ""
params[:profile][:searchable] ||= false
params[:profile][:photo] = Photo.where(:author_id => current_user.person.id,
:id => params[:photo_id]).first if params[:photo_id]
if current_user.update_profile params[:profile]
respond_to do |format|
format.js { render :nothing => true, :status => 200 }
format.html {
flash[:notice] = I18n.t 'profiles.update.updated'
if current_user.getting_started?
redirect_to getting_started_path
else
redirect_to edit_profile_path
end
}
end
else
respond_to do |format|
format.js { render :nothing => true, :status => 200 }
format.html {
flash[:error] = I18n.t 'profiles.update.failed'
if params[:getting_started]
redirect_to getting_started_path(:step => params[:getting_started])
else
redirect_to edit_profile_path
end
}
end
end
end end
end end

View file

@ -25,6 +25,7 @@ class Profile < ActiveRecord::Base
xml_attr :bio xml_attr :bio
xml_attr :location xml_attr :location
xml_attr :searchable xml_attr :searchable
xml_attr :nsfw
xml_attr :tag_string xml_attr :tag_string
before_save :strip_names before_save :strip_names
@ -39,7 +40,7 @@ class Profile < ActiveRecord::Base
validate :valid_birthday validate :valid_birthday
attr_accessible :first_name, :last_name, :image_url, :image_url_medium, attr_accessible :first_name, :last_name, :image_url, :image_url_medium,
:image_url_small, :birthday, :gender, :bio, :location, :searchable, :date, :tag_string :image_url_small, :birthday, :gender, :bio, :location, :searchable, :date, :tag_string, :nsfw
belongs_to :person belongs_to :person
before_validation do before_validation do

View file

@ -47,7 +47,14 @@
%p{:class=>"checkbox_select"} %p{:class=>"checkbox_select"}
= label_tag 'profile[searchable]', t('profiles.edit.allow_search') = label_tag 'profile[searchable]', t('profiles.edit.allow_search')
= check_box_tag 'profile[searchable]', true, profile.searchable = check_box_tag 'profile[searchable]', true, profile.searchable
%br
%br
%h4= t('nsfw')
%p.nsfw_explanation=profile.nsfw? ? t('.you_are_nsfw') : t('.you_are_safe_for_work')
%p{:class=>"checkbox_select"}
= check_box_tag 'profile[nsfw]', true, profile.nsfw?
= label_tag 'profile[nsfw]', "nsfw?"
%br %br
%br %br

View file

@ -33,6 +33,7 @@ en:
public: "Public" public: "Public"
limited: "Limited" limited: "Limited"
search: "Search" search: "Search"
nsfw: "NSFW"
find_people: "Find people or #tags" find_people: "Find people or #tags"
_home: "Home" _home: "Home"
more: "More" more: "More"
@ -648,6 +649,8 @@ en:
update_profile: "Update Profile" update_profile: "Update Profile"
allow_search: "Allow for people to search for you within Diaspora" allow_search: "Allow for people to search for you within Diaspora"
edit_profile: "Edit profile" edit_profile: "Edit profile"
you_are_nsfw: "You have marked yourself not safe for work, your content will not show up in people who have opted out of seeing objectionable content's streams."
you_are_safe_for_work: "You have marked yourself as safe for work, this means you agree the content you post will agree with the community guidelines."
update: update:
updated: "Profile updated" updated: "Profile updated"
failed: "Failed to update profile" failed: "Failed to update profile"

View file

@ -0,0 +1,9 @@
class AddNsfwToProfiles < ActiveRecord::Migration
def self.up
add_column :profiles, :nsfw, :boolean, :default => false
end
def self.down
remove_column :profiles, :nsfw
end
end

View file

@ -343,6 +343,7 @@ ActiveRecord::Schema.define(:version => 20120203220932) do
t.datetime "updated_at" t.datetime "updated_at"
t.string "location" t.string "location"
t.string "full_name", :limit => 70 t.string "full_name", :limit => 70
t.boolean "nsfw", :default => false
end end
add_index "profiles", ["full_name", "searchable"], :name => "index_profiles_on_full_name_and_searchable" add_index "profiles", ["full_name", "searchable"], :name => "index_profiles_on_full_name_and_searchable"

View file

@ -0,0 +1,24 @@
@javascript
Feature: Not safe for work
Scenario: Setting not safe for work
Given a user named "pr0n king" with email "tommy@pr0n.xxx"
And I sign in as "tommy@pr0n.xxx"
When I go to the edit profile page
And I should see the "you are safe for work" message
And I mark myself as not safe for work
And I submit the form
Then I should be on the edit profile page
And I should see the "you are nsfw" message
Scenario: NSFWs users posts are nsfw
Given a nsfw user with email "tommy@pr0nking.com"
And I sign in as "tommy@pr0nking.com"
And I post "I love 0bj3ction4bl3 c0nt3nt!"
Then the post "I love 0bj3ction4bl3 c0nt3nt!" should be marked nsfw
# And I log out
# And I log in as an office worker
# And I am folllowing "tommy@pr0n.xxx"
# Then I should not see "I love 0bj3ction4bl3 c0nt3nt!" in my stream

View file

@ -4,11 +4,12 @@ When /^(.*) in the header$/ do |action|
end end
end end
And /^I submit the form$/ do
click_button :submit
end
And /^I expand the publisher$/ do And /^I expand the publisher$/ do
page.execute_script(' click_publisher
$("#publisher").removeClass("closed");
$("#publisher").find("textarea").focus();
')
end end
When 'I click the aspects title' do When 'I click the aspects title' do

View file

@ -9,8 +9,6 @@ Then /^I should see the "(.*)" message$/ do |message|
I18n.translate('profiles.edit.you_are_safe_for_work') I18n.translate('profiles.edit.you_are_safe_for_work')
when 'you are nsfw' when 'you are nsfw'
I18n.translate('profiles.edit.you_are_nsfw') I18n.translate('profiles.edit.you_are_nsfw')
when 'hello'
"well hello there man"
else else
raise "muriel, you don't have that message key, add one here" raise "muriel, you don't have that message key, add one here"
end end

View file

@ -1,8 +1,6 @@
When /^I post a photo with a token$/ do Then /^the post "([^"]*)" should be marked nsfw$/ do |text|
json = JSON.parse <<JSON pending
{"activity":{"actor":{"url":"http://cubbi.es/daniel","displayName":"daniel","objectType":"person"},"published":"2011-05-19T18:12:23Z","verb":"save","object":{"objectType":"photo","url":"http://i658.photobucket.com/albums/uu308/R3b3lAp3/Swagger_dog.jpg","image":{"url":"http://i658.photobucket.com/albums/uu308/R3b3lAp3/Swagger_dog.jpg","width":637,"height":469}},"provider":{"url":"http://cubbi.es/","displayName":"Cubbi.es"}}} assert_nsfw(text)
JSON
page.driver.post(activity_streams_photos_path, json.merge!(:auth_token => @me.authentication_token))
end end
Then /^I should see an uploaded image within the photo drop zone$/ do Then /^I should see an uploaded image within the photo drop zone$/ do

View file

@ -0,0 +1,3 @@
And /^I mark myself as not safe for work$/ do
check('profile[nsfw]')
end

View file

@ -7,28 +7,22 @@ Given /^a user with username "([^\"]*)" and password "([^\"]*)"$/ do |username,
end end
Given /^a user with email "([^\"]*)"$/ do |email| Given /^a user with email "([^\"]*)"$/ do |email|
user = Factory(:user, :email => email, :password => 'password', create_user(:email => email)
:password_confirmation => 'password', :getting_started => false)
user.aspects.create(:name => "Besties")
user.aspects.create(:name => "Unicorns")
end end
Given /^a user with username "([^\"]*)"$/ do |username| Given /^a user with username "([^\"]*)"$/ do |username|
user = Factory(:user, :email => username + "@" + username + '.' + username, :username => username, create_user(:email => username + "@" + username + '.' + username, :username => username)
:password => 'password', :password_confirmation => 'password', :getting_started => false)
user.aspects.create(:name => "Besties")
user.aspects.create(:name => "Unicorns")
end end
Given /^a user named "([^\"]*)" with email "([^\"]*)"$/ do |name, email| Given /^a user named "([^\"]*)" with email "([^\"]*)"$/ do |name, email|
first, last = name.split first, last = name.split
username = "#{first}_#{last}" if first user = create_user(:email => email, :username => "#{first}_#{last}")
user = Factory(:user, :email => email, :password => 'password', :username => "#{first}_#{last}",
:password_confirmation => 'password', :getting_started => false)
user.profile.update_attributes!(:first_name => first, :last_name => last) if first user.profile.update_attributes!(:first_name => first, :last_name => last) if first
user.aspects.create!(:name => "Besties") end
user.aspects.create!(:name => "Unicorns")
Given /^a nsfw user with email "([^\"]*)"$/ do |email|
user = create_user(:email => email)
user.profile.update_attributes(:nsfw => true)
end end
Given /^I have been invited by an admin$/ do Given /^I have been invited by an admin$/ do

View file

@ -69,4 +69,4 @@ module PublishingCukeHelpers
end end
end end
World(PublishingCukeHelpers) World(PublishingCukeHelpers)

View file

@ -0,0 +1,20 @@
module UserCukeHelpers
def create_user(overrides={})
default_attrs = {
:password => 'password',
:password_confirmation => 'password',
:getting_started => false
}
user = Factory(:user, default_attrs.merge!(overrides))
add_standard_aspects(user)
user
end
def add_standard_aspects(user)
user.aspects.create(:name => "Besties")
user.aspects.create(:name => "Unicorns")
end
end
World(UserCukeHelpers)

View file

@ -309,6 +309,7 @@ describe Profile do
"gender", "gender",
"bio", "bio",
"searchable", "searchable",
"nsfw",
"location", "location",
"full_name"].sort "full_name"].sort
end end