-
Notifications
You must be signed in to change notification settings - Fork 18
/
FQB.php
232 lines (200 loc) · 4.77 KB
/
FQB.php
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
<?php namespace SammyK\FacebookQueryBuilder;
class FQB
{
/**
* Production Graph API URL.
*
* @const string
*/
const BASE_GRAPH_URL = 'https://graph.facebook.com';
/**
* Beta tier URL of the Graph API.
*
* @const string
*/
const BASE_GRAPH_URL_BETA = 'https://graph.beta.facebook.com';
/**
* The GraphNode we are working with.
*
* @var GraphNode
*/
private $graphNode;
/**
* The URL prefix version of the Graph API.
*
* @var string|null
*/
private $graphVersion;
/**
* The application secret key.
*
* @var string|null
*/
private $appSecret;
/**
* A toggle to enable the beta tier of the Graph API.
*
* @var boolean
*/
private $enableBetaMode = false;
/**
* The config options sent in from the user.
*
* @var array
*/
private $config = [];
/**
* @param array $config An array of config options.
* @param string|null $graphEndpoint The name of the Graph API endpoint.
*/
public function __construct(array $config = [], $graphEndpoint = '')
{
if (isset($graphEndpoint)) {
$this->graphNode = new GraphNode($graphEndpoint);
}
$this->config = $config;
if (isset($config['default_access_token'])) {
$this->accessToken($config['default_access_token']);
}
if (isset($config['default_graph_version'])) {
$this->graphVersion($config['default_graph_version']);
}
if (isset($config['app_secret'])) {
$this->appSecret = $config['app_secret'];
}
if (isset($config['enable_beta_mode']) && $config['enable_beta_mode'] === true) {
$this->enableBetaMode = true;
}
}
/**
* New up an instance of self.
*
* @param string $graph_node_name The node name
*
* @return FQB
*/
public function node($graph_node_name)
{
return new static($this->config, $graph_node_name);
}
/**
* New up an Edge instance.
*
* @param string $edgeName
* @param array $fields The fields we want on the edge
*
* @return GraphEdge
*/
public function edge($edgeName, array $fields = [])
{
return new GraphEdge($edgeName, $fields);
}
/**
* Alias to method on GraphNode.
*
* @param array|string $fields
*
* @return FQB
*/
public function fields($fields)
{
if (!is_array($fields)) {
$fields = func_get_args();
}
$this->graphNode->fields($fields);
return $this;
}
/**
* Sets the access token to use with this request.
*
* @param string $accessToken The access token to overwrite the default.
*
* @return FQB
*/
public function accessToken($accessToken)
{
$this->graphNode->modifiers([
GraphNode::PARAM_ACCESS_TOKEN => $accessToken,
]);
return $this;
}
/**
* Sets the graph version to use with this request.
*
* @param string $graphVersion The access token to overwrite the default.
*
* @return FQB
*/
public function graphVersion($graphVersion)
{
$this->graphVersion = $graphVersion;
return $this;
}
/**
* Alias to method on GraphNode.
*
* @param int $limit
*
* @return FQB
*/
public function limit($limit)
{
$this->graphNode->limit($limit);
return $this;
}
/**
* Alias to method on GraphNode.
*
* @param array $data
*
* @return FQB
*/
public function modifiers(array $data)
{
$this->graphNode->modifiers($data);
return $this;
}
/**
* Return the generated request as a URL with the hostname.
*
* @return string
*/
public function asUrl()
{
return $this->getHostname().$this->asEndpoint();
}
/**
* Return the generated request as a URL endpoint sans the hostname.
*
* @return string
*/
public function asEndpoint()
{
$graphVersionPrefix = '';
if ($this->graphVersion) {
$graphVersionPrefix = '/'.$this->graphVersion;
}
return $graphVersionPrefix.$this->graphNode->asUrl($this->appSecret);
}
/**
* Returns the Graph URL as nicely formatted string.
*
* @return string
*/
public function __toString()
{
return $this->asUrl();
}
/**
* Returns the Graph API hostname.
*
* @return string
*/
private function getHostname()
{
if ($this->enableBetaMode === true) {
return static::BASE_GRAPH_URL_BETA;
}
return static::BASE_GRAPH_URL;
}
}