forked from ebonical/tweetie_flickr
/
users_controller.rb
116 lines (103 loc) · 3.44 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
class UsersController < ApplicationController
before_filter :authenticate, :except => [:index, :show]
before_filter :get_user, :only => [:show, :edit, :update]
before_filter :set_flickr, :only => [:show, :edit, :update, :flickr_callback]
before_filter :check_flickr_auth, :except => [:new, :create, :edit, :update, :flickr_callback]
skip_before_filter :verify_authenticity_token, :only => [:create]
def index
@users = User.paginate :page => params[:page], :order => :twitter_username
end
def show
@photos = @user.photos.paginate :page => params[:page], :order => 'created_at DESC', :per_page => 18
end
def new
@user = User.new
end
def edit
if self? != true
flash[:error] = "Editing another user's profile is not allowed."
redirect_to users_path and return false
end
end
def update
# convert the flickr_username to their flickr_user_id
if params[:user]
if params[:user][:flickr_username]
flickr_username = params[:user][:flickr_username].strip.gsub
if flickr_username.match('/')
flickr_username = flickr_username.gsub('http://flickr.com/people/','').gsub('/','')
end
new_flickr_id = check_flickr_user_id(flickr_username)
if new_flickr_id.blank?
params[:user].delete(:flickr_username)
else
params[:user][:flickr_user_id] = new_flickr_id
end
end
params[:user][:custom_client_hash]=nil if params[:user][:reset_custom_client_hash]==true
params[:user][:custom_client_hash]=params[:user][:new_custom_client_hash] if params[:user][:new_custom_client_hash]
@user.update_attributes(params[:user])
end
unless @user.flickr_token
redirect_to @flickr.auth.url(:write) and return
else
respond_to do |format|
format.html { redirect_to user_path(@user) }
end
end
end
def flickr_callback
flickr = Flickr.new(FLICKR)
flickr.auth.frob = params[:frob]
current_user.update_attribute :flickr_token, flickr.auth.token.token
respond_to do |format|
format.html { redirect_to user_path(current_user) }
end
end
private
def get_user
unless params[:twitter_username] or params[:id]
flash[:error]='You must provide a username.'
redirect_to users_path and return false
end
twitter_username = params[:twitter_username]
twitter_username ||= params[:id]
@user = User.find_by_twitter_username(twitter_username)
unless @user
flash[:error] = 'We could not locate that user.'
redirect_to users_path and return false
end
end
def self?
if current_user == @user
return true
else
return false
end
end
def set_flickr
if current_user && current_user.flickr_token
@flickr = Flickr.new(FLICKR.merge(:token => current_user.flickr_token))
else
@flickr = Flickr.new(FLICKR)
end
end
def check_flickr_auth
return unless current_user
unless current_user.flickr_token && current_user.flickr_user_id
redirect_to edit_user_path(current_user) and return
end
end
def check_flickr_user_id(flickr_username)
# no need to update the flickr_user_id if it is the same
if @user.flickr_username == flickr_username
return nil
end
flickr_id = User.get_flickr_id(flickr_username)
unless flickr_id
flash[:error] = "There was an error looking up your ID"
render :action => :edit and return nil
end
flickr_id
end
end