diaspora/app/controllers/people_controller.rb
Josh Lubaway ecd1d2ecd6 Bug #624 Can't unset birthday
This change allows users to "unset" their birthday.

Previously the logic checked to see if all values for birthday were
present (year, month, day). If all values were present the update
would proceed.

Now, there is another condition. If all values are empty, then
also proceed with the update. Thus, allowing a user to "unset" their
birthday.
2010-11-30 21:23:47 -08:00

129 lines
3.8 KiB
Ruby

# Copyright (c) 2010, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
class PeopleController < ApplicationController
before_filter :authenticate_user!
respond_to :html
respond_to :json, :only => [:index, :show]
def index
@aspect = :search
@people = Person.search(params[:q]).paginate :page => params[:page], :per_page => 25, :order => 'created_at DESC'
@requests = Request.all(:to_id.in => @people.map{|p| p.id})
#only do it if it is an email address
if params[:q].try(:match, Devise.email_regexp)
webfinger(params[:q])
end
if @people.count == 1
redirect_to @people.first
else
respond_with @people
end
end
def show
@person = Person.find(params[:id].to_id)
@post_type = :all
@aspect = :none
if @person
@profile = @person.profile
@contact = current_user.contact_for(@person)
@is_contact = @person != current_user.person && @contact
if @contact
@aspects_with_person = @contact.aspects
end
@posts = current_user.visible_posts(:person_id => @person.id, :_type => "StatusMessage").paginate :page => params[:page], :order => 'created_at DESC'
@post_hashes = hashes_for_posts @posts
respond_with @person, :locals => {:post_type => :all}
else
flash[:error] = I18n.t 'people.show.does_not_exist'
redirect_to people_path
end
end
def destroy
current_user.disconnect(current_user.visible_person_by_id(params[:id]))
respond_with :location => root_url
end
def edit
@aspect = :person_edit
@person = current_user.person
@profile = @person.profile
end
def update
# upload and set new profile photo
params[:person][:profile] ||= {}
if params[:person][:profile][:image].present?
raw_image = params[:person][:profile].delete(:image)
params[:profile_image_hash] = { :user_file => raw_image, :to => "all" }
photo = current_user.post(:photo, params[:profile_image_hash])
params[:person][:profile][:image_url] = photo.url(:thumb_large)
params[:person][:profile][:image_url_medium] = photo.url(:thumb_medium)
params[:person][:profile][:image_url_small] = photo.url(:thumb_small)
end
if current_user.update_profile params[:person][:profile]
flash[:notice] = I18n.t 'people.update.updated'
else
flash[:error] = I18n.t 'people.update.failed'
end
if params[:getting_started]
redirect_to getting_started_path(:step => params[:getting_started].to_i+1)
else
redirect_to edit_person_path
end
end
def retrieve_remote
if params[:diaspora_handle]
webfinger(params[:diaspora_handle], :single_aspect_form => true)
render :nothing => true
else
render :nothing => true, :status => 422
end
end
private
def hashes_for_posts posts
post_ids = posts.map{|p| p.id}
comment_hash = Comment.hash_from_post_ids post_ids
person_hash = Person.from_post_comment_hash comment_hash
photo_hash = Photo.hash_from_post_ids post_ids
posts.map do |post|
{:post => post,
:person => @person,
:photos => photo_hash[post.id],
:comments => comment_hash[post.id].map do |comment|
{:comment => comment,
:person => person_hash[comment.person_id],
}
end,
}
end
end
def webfinger(account, opts = {})
finger = EMWebfinger.new(account)
finger.on_person do |response|
if response.class == Person
response.socket_to_uid(current_user.id, opts)
else
require File.join(Rails.root,'lib/diaspora/websocket')
Diaspora::WebSocket.queue_to_user(current_user.id, {:class => 'people', :status => 'fail', :query => account, :response => response}.to_json)
end
end
end
end