facebook_app 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +4 -0
- data/Gemfile.lock +158 -0
- data/README.textile +52 -0
- data/Rakefile +1 -0
- data/app/assets/images/shared/ajax-loader.gif +0 -0
- data/app/assets/images/single_pixel.png +0 -0
- data/app/assets/javascripts/facebook_app.js +9 -0
- data/app/assets/javascripts/pages.coffee.erb +18 -0
- data/app/assets/stylesheets/admin.sass +13 -0
- data/app/assets/stylesheets/configurables.sass +11 -0
- data/app/assets/stylesheets/facebook_app.css +9 -0
- data/app/assets/stylesheets/layout.css.scss +280 -0
- data/app/assets/stylesheets/yui-3.4.1.css +7 -0
- data/app/controllers/facebook_app/achievements_controller.rb +21 -0
- data/app/controllers/facebook_app/admin_controller.rb +42 -0
- data/app/controllers/facebook_app/external_trackings_controller.rb +21 -0
- data/app/controllers/facebook_app/facebook_app_controller.rb +59 -0
- data/app/controllers/facebook_app/oauth_controller.rb +46 -0
- data/app/controllers/facebook_app/pages_controller.rb +14 -0
- data/app/helpers/facebook_app/application_helper.rb +55 -0
- data/app/mailers/.gitkeep +0 -0
- data/app/models/.gitkeep +0 -0
- data/app/models/facebook_app/conversion.rb +50 -0
- data/app/models/facebook_app/conversion_summary.rb +58 -0
- data/app/models/facebook_app/facebook_credentials.rb +56 -0
- data/app/models/facebook_app/infographic_server_communicator.rb +21 -0
- data/app/views/facebook_app/achievements/show.html.slim +12 -0
- data/app/views/facebook_app/admin/_conversion_stage.html.slim +5 -0
- data/app/views/facebook_app/admin/_spamalytics.html.slim +16 -0
- data/app/views/facebook_app/admin/new_fb_credentials.html.slim +10 -0
- data/app/views/facebook_app/admin/show.html.slim +28 -0
- data/app/views/facebook_app/external_trackings/test.html.slim +3 -0
- data/app/views/facebook_app/pages/privacy_policy.html.slim +49 -0
- data/app/views/facebook_app/pages/terms_of_service.html.slim +49 -0
- data/app/views/layouts/facebook_app.html.slim +17 -0
- data/config/routes.rb +31 -0
- data/db/migrate/20111024214949_add_facebook_app.rb +29 -0
- data/facebook_app.gemspec +33 -0
- data/lib/facebook_app/engine.rb +15 -0
- data/lib/facebook_app/recipes.rb +39 -0
- data/lib/facebook_app/version.rb +3 -0
- data/lib/facebook_app.rb +15 -0
- data/lib/generators/facebook_app/install_generator.rb +19 -0
- data/lib/generators/facebook_app/templates/configurable.yml +79 -0
- data/lib/generators/facebook_app/templates/delayed_job +5 -0
- data/lib/generators/facebook_app/templates/seeds.rb +7 -0
- data/script/infographic.py +180 -0
- metadata +180 -0
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,158 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
facebook_app (0.0.2)
|
5
|
+
configurable_engine
|
6
|
+
delayed_job (~> 2.1.0)
|
7
|
+
formtastic
|
8
|
+
koala
|
9
|
+
rails (>= 3.1)
|
10
|
+
rubber (= 1.15.0)
|
11
|
+
slim-rails
|
12
|
+
state_machine
|
13
|
+
|
14
|
+
GEM
|
15
|
+
remote: http://rubygems.org/
|
16
|
+
specs:
|
17
|
+
actionmailer (3.1.0)
|
18
|
+
actionpack (= 3.1.0)
|
19
|
+
mail (~> 2.3.0)
|
20
|
+
actionpack (3.1.0)
|
21
|
+
activemodel (= 3.1.0)
|
22
|
+
activesupport (= 3.1.0)
|
23
|
+
builder (~> 3.0.0)
|
24
|
+
erubis (~> 2.7.0)
|
25
|
+
i18n (~> 0.6)
|
26
|
+
rack (~> 1.3.2)
|
27
|
+
rack-cache (~> 1.0.3)
|
28
|
+
rack-mount (~> 0.8.2)
|
29
|
+
rack-test (~> 0.6.1)
|
30
|
+
sprockets (~> 2.0.0)
|
31
|
+
activemodel (3.1.0)
|
32
|
+
activesupport (= 3.1.0)
|
33
|
+
bcrypt-ruby (~> 3.0.0)
|
34
|
+
builder (~> 3.0.0)
|
35
|
+
i18n (~> 0.6)
|
36
|
+
activerecord (3.1.0)
|
37
|
+
activemodel (= 3.1.0)
|
38
|
+
activesupport (= 3.1.0)
|
39
|
+
arel (~> 2.2.1)
|
40
|
+
tzinfo (~> 0.3.29)
|
41
|
+
activeresource (3.1.0)
|
42
|
+
activemodel (= 3.1.0)
|
43
|
+
activesupport (= 3.1.0)
|
44
|
+
activesupport (3.1.0)
|
45
|
+
multi_json (~> 1.0)
|
46
|
+
addressable (2.2.6)
|
47
|
+
amazon-ec2 (0.9.17)
|
48
|
+
xml-simple (>= 1.0.12)
|
49
|
+
arel (2.2.1)
|
50
|
+
aws-s3 (0.6.2)
|
51
|
+
builder
|
52
|
+
mime-types
|
53
|
+
xml-simple
|
54
|
+
bcrypt-ruby (3.0.1)
|
55
|
+
builder (3.0.0)
|
56
|
+
capistrano (2.9.0)
|
57
|
+
highline
|
58
|
+
net-scp (>= 1.0.0)
|
59
|
+
net-sftp (>= 2.0.0)
|
60
|
+
net-ssh (>= 2.0.14)
|
61
|
+
net-ssh-gateway (>= 1.1.0)
|
62
|
+
configurable_engine (0.2.9)
|
63
|
+
activerecord (~> 3)
|
64
|
+
rails (~> 3)
|
65
|
+
daemons (1.1.4)
|
66
|
+
delayed_job (2.1.4)
|
67
|
+
activesupport (~> 3.0)
|
68
|
+
daemons
|
69
|
+
erubis (2.7.0)
|
70
|
+
faraday (0.7.5)
|
71
|
+
addressable (~> 2.2.6)
|
72
|
+
multipart-post (~> 1.1.3)
|
73
|
+
rack (< 2, >= 1.1.0)
|
74
|
+
formtastic (2.0.0)
|
75
|
+
rails (~> 3.0)
|
76
|
+
highline (1.6.2)
|
77
|
+
hike (1.2.1)
|
78
|
+
httpclient (2.2.2)
|
79
|
+
i18n (0.6.0)
|
80
|
+
json (1.6.1)
|
81
|
+
koala (1.2.1)
|
82
|
+
faraday (~> 0.7.0)
|
83
|
+
multi_json (~> 1.0)
|
84
|
+
mail (2.3.0)
|
85
|
+
i18n (>= 0.4.0)
|
86
|
+
mime-types (~> 1.16)
|
87
|
+
treetop (~> 1.4.8)
|
88
|
+
mime-types (1.17.1)
|
89
|
+
multi_json (1.0.3)
|
90
|
+
multipart-post (1.1.3)
|
91
|
+
mumboe-soap4r (1.5.8.4)
|
92
|
+
httpclient (>= 2.1.1)
|
93
|
+
net-scp (1.0.4)
|
94
|
+
net-ssh (>= 1.99.1)
|
95
|
+
net-sftp (2.0.5)
|
96
|
+
net-ssh (>= 2.0.9)
|
97
|
+
net-ssh (2.2.1)
|
98
|
+
net-ssh-gateway (1.1.0)
|
99
|
+
net-ssh (>= 1.99.1)
|
100
|
+
nettica (0.4.0)
|
101
|
+
mumboe-soap4r
|
102
|
+
polyglot (0.3.2)
|
103
|
+
rack (1.3.5)
|
104
|
+
rack-cache (1.0.3)
|
105
|
+
rack (>= 0.4)
|
106
|
+
rack-mount (0.8.3)
|
107
|
+
rack (>= 1.0.0)
|
108
|
+
rack-ssl (1.3.2)
|
109
|
+
rack
|
110
|
+
rack-test (0.6.1)
|
111
|
+
rack (>= 1.0)
|
112
|
+
rails (3.1.0)
|
113
|
+
actionmailer (= 3.1.0)
|
114
|
+
actionpack (= 3.1.0)
|
115
|
+
activerecord (= 3.1.0)
|
116
|
+
activeresource (= 3.1.0)
|
117
|
+
activesupport (= 3.1.0)
|
118
|
+
bundler (~> 1.0)
|
119
|
+
railties (= 3.1.0)
|
120
|
+
railties (3.1.0)
|
121
|
+
actionpack (= 3.1.0)
|
122
|
+
activesupport (= 3.1.0)
|
123
|
+
rack-ssl (~> 1.3.2)
|
124
|
+
rake (>= 0.8.7)
|
125
|
+
rdoc (~> 3.4)
|
126
|
+
thor (~> 0.14.6)
|
127
|
+
rake (0.9.2.2)
|
128
|
+
rdoc (3.11)
|
129
|
+
json (~> 1.4)
|
130
|
+
rubber (1.15.0)
|
131
|
+
amazon-ec2 (>= 0.9.17)
|
132
|
+
aws-s3
|
133
|
+
capistrano (>= 2.4.0)
|
134
|
+
nettica
|
135
|
+
slim (1.0.3)
|
136
|
+
temple (~> 0.3.4)
|
137
|
+
tilt (~> 1.3.2)
|
138
|
+
slim-rails (0.2.1)
|
139
|
+
slim (>= 0.9.2)
|
140
|
+
sprockets (2.0.3)
|
141
|
+
hike (~> 1.2)
|
142
|
+
rack (~> 1.0)
|
143
|
+
tilt (!= 1.3.0, ~> 1.1)
|
144
|
+
state_machine (1.0.2)
|
145
|
+
temple (0.3.4)
|
146
|
+
thor (0.14.6)
|
147
|
+
tilt (1.3.3)
|
148
|
+
treetop (1.4.10)
|
149
|
+
polyglot
|
150
|
+
polyglot (>= 0.3.1)
|
151
|
+
tzinfo (0.3.30)
|
152
|
+
xml-simple (1.1.1)
|
153
|
+
|
154
|
+
PLATFORMS
|
155
|
+
ruby
|
156
|
+
|
157
|
+
DEPENDENCIES
|
158
|
+
facebook_app!
|
data/README.textile
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
h1. Facebook App Engine
|
2
|
+
|
3
|
+
Everything you need to quickly build and deploy Facebook apps.
|
4
|
+
|
5
|
+
h2. Features
|
6
|
+
|
7
|
+
h3. Tracking at permissions dialogue various stages, along viral and regular marketing methods
|
8
|
+
|
9
|
+
h3. Infographic generation and tagging server communication
|
10
|
+
|
11
|
+
h3. Comments and liking viral hooks.
|
12
|
+
|
13
|
+
h3. Achievements viral hooks.
|
14
|
+
|
15
|
+
h3. Thorough authenitcation solution using OAUTH2
|
16
|
+
|
17
|
+
h3. Admin backend for cranking up or down various virality hooks.
|
18
|
+
|
19
|
+
Visit admin/configurable
|
20
|
+
|
21
|
+
h3. Helper methods to help non technical users test the app.
|
22
|
+
|
23
|
+
Visit /admin
|
24
|
+
|
25
|
+
h3. Namespaced models and method names to avoid clashes
|
26
|
+
|
27
|
+
h3. Terms of service and privacy policy
|
28
|
+
|
29
|
+
Automatically modified to account for app name
|
30
|
+
|
31
|
+
Key methods:
|
32
|
+
|
33
|
+
Controller
|
34
|
+
before_filter :ensure_logged_in, :load_graph
|
35
|
+
|
36
|
+
begin_tracking
|
37
|
+
(start tracking at stage 1)
|
38
|
+
|
39
|
+
login_as_app
|
40
|
+
(you can log in as the app or as a user)
|
41
|
+
|
42
|
+
|
43
|
+
h2. Installation Instructions
|
44
|
+
|
45
|
+
gem "facebook_app"
|
46
|
+
rake facebook_app:install:migrations
|
47
|
+
rake db:migrate
|
48
|
+
rake facebook_app:install
|
49
|
+
rake db:migrate
|
50
|
+
|
51
|
+
#routes in main app
|
52
|
+
mount FacebookApp::Engine => "/"
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
Binary file
|
Binary file
|
@@ -0,0 +1,9 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into including all the files listed below.
|
2
|
+
// Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
|
3
|
+
// be included in the compiled file accessible from http://example.com/assets/application.js
|
4
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
5
|
+
// the compiled file.
|
6
|
+
//
|
7
|
+
//= require jquery
|
8
|
+
//= require jquery_ujs
|
9
|
+
//= require_tree .
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# Place all the behaviors and hooks related to the matching controller here.
|
2
|
+
# All this logic will automatically be available in application.js.
|
3
|
+
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
|
4
|
+
|
5
|
+
# Fix bug where Facebook platform added snippet to url
|
6
|
+
|
7
|
+
if (window.location.hash == '#_=_')
|
8
|
+
window.location.hash = ''
|
9
|
+
|
10
|
+
click_anywhere_redirect = (redirect_link) ->
|
11
|
+
$(document).ready(
|
12
|
+
() -> $("*").each($(this).click(() -> window.location = redirect_link))
|
13
|
+
)
|
14
|
+
|
15
|
+
if window.location.href.match(/infographic/)
|
16
|
+
identified_link = "http://www.identified.com/?fbg=1"
|
17
|
+
click_anywhere_redirect(identified_link)
|
18
|
+
setTimeout((() -> window.location = identified_link), 12000)
|
@@ -0,0 +1,9 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll automatically include all the stylesheets available in this directory
|
3
|
+
* and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
|
4
|
+
* the top of the compiled file, but it's generally better to create a new file per style scope.
|
5
|
+
*= require yui-3.4.1.css
|
6
|
+
*= require formtastic
|
7
|
+
*= require_self
|
8
|
+
*= require_tree .
|
9
|
+
*/
|
@@ -0,0 +1,280 @@
|
|
1
|
+
body{
|
2
|
+
padding:0px;
|
3
|
+
margin:0px auto;
|
4
|
+
font-family:"Lucida Grande", Verdana, Arial;
|
5
|
+
font-size:13px;
|
6
|
+
width:760px;
|
7
|
+
line-height:1.5em;
|
8
|
+
|
9
|
+
}
|
10
|
+
|
11
|
+
a {
|
12
|
+
cursor: pointer;
|
13
|
+
color: #3B5998;
|
14
|
+
text-decoration: none;
|
15
|
+
&:hover{
|
16
|
+
text-decoration:underline
|
17
|
+
}
|
18
|
+
}
|
19
|
+
|
20
|
+
h1, h2{
|
21
|
+
font-family:"HelveticaNeue", "Helvetica", Arial;
|
22
|
+
}
|
23
|
+
|
24
|
+
h1{
|
25
|
+
font-weight:800;
|
26
|
+
font-size:40px;
|
27
|
+
padding:40px 0px 20px 0px;
|
28
|
+
}
|
29
|
+
|
30
|
+
h2{
|
31
|
+
font-weight:200;
|
32
|
+
font-size:24px;
|
33
|
+
color:#646464;
|
34
|
+
padding-bottom:40px;
|
35
|
+
}
|
36
|
+
|
37
|
+
#privacy {
|
38
|
+
p {
|
39
|
+
margin-bottom: 10px;
|
40
|
+
}
|
41
|
+
h2 {
|
42
|
+
padding-bottom: 10px;
|
43
|
+
}
|
44
|
+
|
45
|
+
}
|
46
|
+
|
47
|
+
div#header{
|
48
|
+
text-align:center;
|
49
|
+
}
|
50
|
+
|
51
|
+
div#content{
|
52
|
+
|
53
|
+
div.row{
|
54
|
+
width:680px;
|
55
|
+
margin:0px auto;
|
56
|
+
margin-bottom:20px;
|
57
|
+
zoom: 1;
|
58
|
+
&:after {
|
59
|
+
clear: both;
|
60
|
+
content: ".";
|
61
|
+
display: block;
|
62
|
+
height: 0;
|
63
|
+
visibility: hidden;
|
64
|
+
}
|
65
|
+
|
66
|
+
.split1,
|
67
|
+
.split2{
|
68
|
+
float:left;
|
69
|
+
margin-right:40px;
|
70
|
+
}
|
71
|
+
|
72
|
+
.split3{
|
73
|
+
float:left;
|
74
|
+
}
|
75
|
+
|
76
|
+
a.big.button{
|
77
|
+
width:578px;
|
78
|
+
text-align:center;
|
79
|
+
img{
|
80
|
+
margin-top: -8px;
|
81
|
+
margin-bottom: -2px;
|
82
|
+
margin-right: 5px;
|
83
|
+
}
|
84
|
+
}
|
85
|
+
|
86
|
+
div.widget{
|
87
|
+
width:200px;
|
88
|
+
.title{
|
89
|
+
font-family:"HelveticaNeue-Medium", "Helvetica", Arial;
|
90
|
+
font-size:26px;
|
91
|
+
font-weight:800;
|
92
|
+
padding:10px 5px;
|
93
|
+
color:white;
|
94
|
+
-webkit-border-top-left-radius: 6px;
|
95
|
+
-webkit-border-top-right-radius: 6px;
|
96
|
+
-moz-border-radius-topleft: 6px;
|
97
|
+
-moz-border-radius-topright: 6px;
|
98
|
+
border-top-left-radius: 6px;
|
99
|
+
border-top-right-radius: 6px;
|
100
|
+
text-align:center;
|
101
|
+
text-shadow:0px 0px 1px black;
|
102
|
+
}
|
103
|
+
|
104
|
+
.photo{
|
105
|
+
width:200px;
|
106
|
+
height:200px;
|
107
|
+
}
|
108
|
+
|
109
|
+
.photo img{
|
110
|
+
clip: rect(0px 200px 200px 0px);
|
111
|
+
position:absolute;
|
112
|
+
width:210px;
|
113
|
+
}
|
114
|
+
|
115
|
+
.badge{
|
116
|
+
position: relative;
|
117
|
+
top: -80px;
|
118
|
+
left: 120px;
|
119
|
+
margin-bottom: -100px;
|
120
|
+
width:100px;
|
121
|
+
}
|
122
|
+
|
123
|
+
.description{
|
124
|
+
border:1px solid #AAA;
|
125
|
+
background:#FFFFFF;
|
126
|
+
|
127
|
+
span.badge-area{
|
128
|
+
display: block;
|
129
|
+
width: 70px;
|
130
|
+
float: right;
|
131
|
+
}
|
132
|
+
|
133
|
+
p{
|
134
|
+
padding:6px;
|
135
|
+
}
|
136
|
+
|
137
|
+
ul li{
|
138
|
+
padding:6px;
|
139
|
+
color:#909090;
|
140
|
+
border-top:1px solid #DDD;
|
141
|
+
span{
|
142
|
+
float:right;
|
143
|
+
font-weight:bold;
|
144
|
+
text-align: right;
|
145
|
+
font-family:"HelveticaNeue-Medium", "Helvetica", Arial;
|
146
|
+
font-size:30px;
|
147
|
+
|
148
|
+
}
|
149
|
+
|
150
|
+
&.winner{
|
151
|
+
background: #FFFCCC;
|
152
|
+
color: #333;
|
153
|
+
}
|
154
|
+
}
|
155
|
+
|
156
|
+
ul.placeholder{
|
157
|
+
display:none;
|
158
|
+
}
|
159
|
+
}
|
160
|
+
|
161
|
+
&.award-1{
|
162
|
+
.title{
|
163
|
+
}
|
164
|
+
}
|
165
|
+
|
166
|
+
&.award-2{
|
167
|
+
.title{
|
168
|
+
}
|
169
|
+
}
|
170
|
+
|
171
|
+
&.award-3{
|
172
|
+
.title{
|
173
|
+
}
|
174
|
+
}
|
175
|
+
|
176
|
+
&.award-4{
|
177
|
+
.title{
|
178
|
+
}
|
179
|
+
}
|
180
|
+
|
181
|
+
&.award-5{
|
182
|
+
.title{
|
183
|
+
}
|
184
|
+
}
|
185
|
+
|
186
|
+
&.award-6{
|
187
|
+
.title{
|
188
|
+
}
|
189
|
+
}
|
190
|
+
|
191
|
+
&.award-7{
|
192
|
+
.title{
|
193
|
+
}
|
194
|
+
}
|
195
|
+
|
196
|
+
&.award-8{
|
197
|
+
.title{
|
198
|
+
}
|
199
|
+
}
|
200
|
+
|
201
|
+
&.award-9{
|
202
|
+
.title{
|
203
|
+
}
|
204
|
+
}
|
205
|
+
|
206
|
+
&.disabled{
|
207
|
+
.title{
|
208
|
+
}
|
209
|
+
|
210
|
+
.photo{
|
211
|
+
width:200px;
|
212
|
+
height:200px;
|
213
|
+
background-position:50% 50%;
|
214
|
+
}
|
215
|
+
}
|
216
|
+
|
217
|
+
&.loading{
|
218
|
+
background:#F2F2F2 url('shared/ajax-loader.gif') no-repeat 50% 45%;
|
219
|
+
|
220
|
+
& > div.photo{
|
221
|
+
visibility:hidden;
|
222
|
+
}
|
223
|
+
|
224
|
+
& > div.description ul.table{
|
225
|
+
display:none;
|
226
|
+
}
|
227
|
+
|
228
|
+
& > div.description ul.placeholder{
|
229
|
+
display:block;
|
230
|
+
}
|
231
|
+
}
|
232
|
+
}
|
233
|
+
}
|
234
|
+
}
|
235
|
+
|
236
|
+
|
237
|
+
.button{
|
238
|
+
display:inline-block;
|
239
|
+
}
|
240
|
+
|
241
|
+
.button.primary {
|
242
|
+
color:white;
|
243
|
+
border:1px solid #3b6e22;
|
244
|
+
box-shadow: 0px 1px 0px #dcdde1;
|
245
|
+
text-shadow:0px -1px 0px #3b6e22;
|
246
|
+
background-image: -webkit-gradient(
|
247
|
+
linear,
|
248
|
+
left bottom,
|
249
|
+
left top,
|
250
|
+
color-stop(0, #67a54b),
|
251
|
+
color-stop(0.97, #75ae5c),
|
252
|
+
color-stop(0.98, #98c286)
|
253
|
+
);
|
254
|
+
background-image: -moz-linear-gradient(
|
255
|
+
center bottom,
|
256
|
+
#67a54b 0%,
|
257
|
+
#75ae5c 97%,
|
258
|
+
#98c286 98%
|
259
|
+
);
|
260
|
+
}
|
261
|
+
|
262
|
+
.button.primary:active{
|
263
|
+
background:#609946;
|
264
|
+
}
|
265
|
+
|
266
|
+
|
267
|
+
.button.big{
|
268
|
+
font-size:18px;
|
269
|
+
padding-top:11px;
|
270
|
+
padding-bottom:11px;
|
271
|
+
padding-left:50px;
|
272
|
+
padding-right:50px;
|
273
|
+
font-weight:bold;
|
274
|
+
}
|
275
|
+
|
276
|
+
a.button{
|
277
|
+
text-decoration:none;
|
278
|
+
}
|
279
|
+
|
280
|
+
|
@@ -0,0 +1,7 @@
|
|
1
|
+
/*
|
2
|
+
YUI 3.4.1 (build 4118)
|
3
|
+
Copyright 2011 Yahoo! Inc. All rights reserved.
|
4
|
+
Licensed under the BSD License.
|
5
|
+
http://yuilibrary.com/license/
|
6
|
+
*/
|
7
|
+
html{color:#000;background:#FFF}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit}input,textarea,select{*font-size:100%}legend{color:#000}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module FacebookApp
|
2
|
+
class AchievementsController < FacebookAppController
|
3
|
+
|
4
|
+
before_filter :login_as_app, :except => :show
|
5
|
+
|
6
|
+
def show
|
7
|
+
end
|
8
|
+
|
9
|
+
def create
|
10
|
+
@user_uid = AwardSet.find_by_uid(params[:id])
|
11
|
+
app_graph.graph_call("#{user_uid}/achievements", {:achievement => achievement_url(1)}, :post)
|
12
|
+
end
|
13
|
+
|
14
|
+
# needs to be done once per Facebook app.
|
15
|
+
# make sure your app is set as a Game
|
16
|
+
def register_with_fb
|
17
|
+
@app_graph.graph_call("#{FB.app_id}/achievements", {:achievement => achievement_url(1), :display_order => 1 }, :post)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module FacebookApp
|
2
|
+
class AdminController < FacebookAppController
|
3
|
+
layout "facebook_app"
|
4
|
+
http_basic_authenticate_with :name => 'identified', :password => 'identified'
|
5
|
+
before_filter :ensure_logged_in, :only => :log_me_out
|
6
|
+
before_filter :load_graph, :only => :log_me_out
|
7
|
+
|
8
|
+
def show
|
9
|
+
@conversion_summary = FacebookApp::ConversionSummary.new
|
10
|
+
|
11
|
+
@fb = FacebookApp::FacebookCredentials.current_credentials
|
12
|
+
end
|
13
|
+
|
14
|
+
def new_fb_credentials
|
15
|
+
@fb = FacebookApp::FacebookCredentials.new
|
16
|
+
end
|
17
|
+
|
18
|
+
def clear_conversion_data
|
19
|
+
FacebookApp::Conversion.destroy_all
|
20
|
+
redirect_to facebook_app.admin_path
|
21
|
+
end
|
22
|
+
|
23
|
+
def log_me_out
|
24
|
+
@graph.graph_call("#{@graph.get_object('me')['id']}/permissions", {}, :delete)
|
25
|
+
|
26
|
+
session[:at] = nil
|
27
|
+
session[:uid] = nil
|
28
|
+
cookies.delete(:conversion_id)
|
29
|
+
flash[:notice] = "You logged out as a Facebook user"
|
30
|
+
redirect_to facebook_app.admin_path
|
31
|
+
end
|
32
|
+
|
33
|
+
def create_fb_credentials
|
34
|
+
@fb = FacebookApp::FacebookCredentials.new(params[:facebook_app_fb])
|
35
|
+
if @fb.save
|
36
|
+
redirect_to facebook_app.admin_path, :notice => "Successful updated facebok credentials"
|
37
|
+
else
|
38
|
+
render :new_fb_credentials
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module FacebookApp
|
2
|
+
class ExternalTrackingsController < FacebookAppController
|
3
|
+
|
4
|
+
def identified_signup
|
5
|
+
Conversion.find_by_id(cookies[:conversion_id]).try(:sign_up_on_identified)
|
6
|
+
show_single_pixel
|
7
|
+
end
|
8
|
+
|
9
|
+
# show the pixel
|
10
|
+
def test
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def show_single_pixel
|
16
|
+
single_pixel = File.read(File.join(Rails.root, "app", "assets", "images", "single_pixel.png"), :mode => "rb")
|
17
|
+
send_data single_pixel, :filename => 'single_pixel.png', :type => 'image/gif'
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|