-
Notifications
You must be signed in to change notification settings - Fork 2.9k
/
users_controller.rb
130 lines (113 loc) · 4.26 KB
/
users_controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# Copyright (c) 2010-2011, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
class UsersController < ApplicationController
require File.join(Rails.root, 'lib/diaspora/ostatus_builder')
require File.join(Rails.root, 'lib/diaspora/exporter')
require File.join(Rails.root, 'lib/collect_user_photos')
before_filter :authenticate_user!, :except => [:new, :create, :public]
respond_to :html
def edit
@aspect = :user_edit
@user = current_user
@email_prefs = Hash.new(true)
@user.user_preferences.each do |pref|
@email_prefs[pref.email_type] = false
end
end
def update
password_changed = false
@user = current_user
if u = params[:user]
u.delete(:password) if u[:password].blank?
u.delete(:password_confirmation) if u[:password].blank? and u[:password_confirmation].blank?
u.delete(:language) if u[:language].blank?
# change email notifications
if u[:email_preferences]
@user.update_user_preferences(u[:email_preferences])
flash[:notice] = I18n.t 'users.update.email_notifications_changed'
# change password
elsif u[:current_password] && u[:password] && u[:password_confirmation]
if @user.update_with_password(u)
password_changed = true
flash[:notice] = I18n.t 'users.update.password_changed'
else
flash[:error] = I18n.t 'users.update.password_not_changed'
end
elsif u[:language]
if @user.update_attributes(:language => u[:language])
I18n.locale = @user.language
flash[:notice] = I18n.t 'users.update.language_changed'
else
flash[:error] = I18n.t 'users.update.language_not_changed'
end
elsif u[:email]
@user.unconfirmed_email = u[:email]
if @user.save
@user.mail_confirm_email
flash[:notice] = I18n.t 'users.update.unconfirmed_email_changed'
else
flash[:error] = I18n.t 'users.update.unconfirmed_email_not_changed'
end
end
elsif aspect_order = params[:reorder_aspects]
@user.reorder_aspects(aspect_order)
end
respond_to do |format|
format.js { render :nothing => true, :status => 204 }
format.all { redirect_to password_changed ? new_user_session_path : edit_user_path }
end
end
def destroy
Resque.enqueue(Job::DeleteAccount, current_user.id)
current_user.lock_access!
sign_out current_user
flash[:notice] = I18n.t 'users.destroy'
redirect_to root_path
end
def public
if user = User.find_by_username(params[:username])
respond_to do |format|
format.atom do
posts = StatusMessage.where(:author_id => user.person.id, :public => true).order('created_at DESC').limit(25)
director = Diaspora::Director.new
ostatus_builder = Diaspora::OstatusBuilder.new(user, posts)
render :xml => director.build(ostatus_builder), :content_type => 'application/atom+xml'
end
format.any { redirect_to person_path(user.person.id) }
end
else
redirect_to root_url, :error => I18n.t('users.public.does_not_exist', :username => params[:username])
end
end
def getting_started
@aspect = :getting_started
@user = current_user
@person = @user.person
@profile = @user.profile
@services = @user.services
@step = 0
render "users/getting_started"
end
def getting_started_completed
user = current_user
user.update_attributes(:getting_started => false)
redirect_to root_path
end
def export
exporter = Diaspora::Exporter.new(Diaspora::Exporters::XML)
send_data exporter.execute(current_user), :filename => "#{current_user.username}_diaspora_data.xml", :type => :xml
end
def export_photos
tar_path = PhotoMover::move_photos(current_user)
send_data( File.open(tar_path).read, :filename => "#{current_user.id}.tar" )
end
def confirm_email
if current_user.confirm_email(params[:token])
flash[:notice] = I18n.t('users.confirm_email.email_confirmed', :email => current_user.email)
elsif current_user.unconfirmed_email.present?
flash[:error] = I18n.t('users.confirm_email.email_not_confirmed')
end
redirect_to edit_user_path
end
end