Newer
Older
# Copyright (c) 2010-2011, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
Daniel Vincent Grippi
a validé
before_filter :authenticate_user!
before_filter :remove_getting_started, :only => [:create]
use_bootstrap_for :bookmarklet
# Called when a user clicks "Mention" on a profile page
# @param person_id [Integer] The id of the person to be mentioned
if params[:person_id] && @person = Person.where(:id => params[:person_id]).first
danielgrippi
a validé
@aspect = :profile
@contact = current_user.contact_for(@person)
@aspects_with_person = []
if @contact
@aspects_with_person = @contact.aspects
@aspect_ids = @aspects_with_person.map{|x| x.id}
gon.aspect_ids = @aspect_ids
danielgrippi
a validé
@contacts_of_contact = @contact.contacts
render :layout => nil
end
danielgrippi
a validé
@aspect = :all
@aspects = current_user.aspects
@aspect_ids = @aspects.map{ |a| a.id }
gon.aspect_ids = @aspect_ids
def bookmarklet
@aspects = current_user.aspects
@aspect_ids = @aspects.map{|x| x.id}
gon.preloads[:bookmarklet] = {
content: params[:content],
title: params[:title],
url: params[:url],
notes: params[:notes]
}
params[:status_message][:aspect_ids] = [*params[:aspect_ids]]
Raphael Sofaer
a validé
normalize_public_flag!
services = [*params[:services]].compact
@status_message = current_user.build_post(:status_message, params[:status_message])
@status_message.build_location(:address => params[:location_address], :coordinates => params[:location_coords]) if params[:location_address].present?
if params[:poll_question].present?
@status_message.build_poll(:question => params[:poll_question])
[*params[:poll_answers]].each do |poll_answer|
@status_message.poll.poll_answers.build(:answer => poll_answer)
end
@status_message.attach_photos_by_ids(params[:photos])
if @status_message.save
aspects = current_user.aspects_from_ids(destination_aspect_ids)
Raphael Sofaer
a validé
current_user.add_to_streams(@status_message, aspects)
receiving_services = Service.titles(services)
Raphael Sofaer
a validé
current_user.dispatch_post(@status_message, :url => short_post_url(@status_message.guid), :service_types => receiving_services)
#this is done implicitly, somewhere else, but it doesnt work, says max. :'(
@status_message.photos.each do |photo|
current_user.dispatch_post(photo)
end
current_user.participate!(@status_message)
if coming_from_profile_page? && !own_profile_page? # if this is a post coming from a profile page
flash[:notice] = successful_mention_message
danielvincent
a validé
respond_to do |format|
format.html { redirect_to :back }
format.mobile { redirect_to stream_path }
format.json { render :json => PostPresenter.new(@status_message, current_user), :status => 201 }
danielvincent
a validé
end
else
respond_to do |format|
format.html { redirect_to :back }
format.mobile { redirect_to stream_path }
format.json { render :nothing => true, :status => 403 }
danielvincent
a validé
end
def destination_aspect_ids
if params[:status_message][:public] || params[:status_message][:aspect_ids].first == "all_aspects"
current_user.aspect_ids
else
params[:aspect_ids]
end
end
def successful_mention_message
t('status_messages.create.success', :names => @status_message.mentioned_people_names)
end
def coming_from_profile_page?
request.env['HTTP_REFERER'].include?("people")
end
def own_profile_page?
request.env['HTTP_REFERER'].include?("/people/" + params[:status_message][:author][:guid].to_s)
end
Raphael Sofaer
a validé
def normalize_public_flag!
# mobile || desktop conditions
sm = params[:status_message]
public_flag = (sm[:aspect_ids] && sm[:aspect_ids].first == 'public') || sm[:public]
Raphael Sofaer
a validé
public_flag.to_s.match(/(true)|(on)/) ? public_flag = true : public_flag = false
params[:status_message][:public] = public_flag
public_flag
def remove_getting_started
current_user.disable_getting_started
end