-
Notifications
You must be signed in to change notification settings - Fork 25
/
facebook.php
94 lines (80 loc) · 2.5 KB
/
facebook.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
<?php
/**
* @package nxcSocialNetworks
* @class nxcSocialNetworksLoginHandlerFacebook
* @author Serhey Dolgushev <serhey.dolgushev@nxc.no>
* @date 16 Sep 2012
**/
class nxcSocialNetworksLoginHandlerFacebook extends nxcSocialNetworksLoginHandler
{
protected function __construct() {
parent::__construct();
$this->OAunth2Connection = nxcSocialNetworksOAuth2::getInstanceByType( 'facebook' );
}
public function getScopes() {
return array( 'email', 'user_about_me', 'user_photos' );
}
public function getCallbackURL() {
return '/nxc_social_network_login/callback/facebook';
}
public function getLoginURL( array $scopes = null, $redirectURL = null ) {
eZURI::transformURI( $redirectURL, false, 'full' );
$connection = $this->getFacebookConnection();
$params = array(
'scope' => implode( ', ', $scopes ),
'redirect_uri' => $redirectURL
);
return $connection->getLoginUrl( $params );
}
public function getUserRemoteID() {
$connection = $this->getFacebookConnection();
$uid = (int) $connection->getUser();
if( $uid === 0 ) {
throw new Exception( 'Could not get user ID. Refresh the page or try again later.' );
}
return 'facebook_user_' . $uid;
}
public function getUserData() {
$connection = $this->getFacebookConnection();
$uid = $connection->getUser();
if( $uid === 0 ) {
throw new Exception( 'Could not get user ID. Refresh the page or try again later.' );
}
$picture = 'var/cache/fb_profile_' . $uid . '.jpg';
$fp = fopen( $picture, 'w' );
$ch = curl_init( BaseFacebook::$DOMAIN_MAP['graph'] . '/' . $uid . '/picture?type=large' );
curl_setopt( $ch, CURLOPT_TIMEOUT, 10 );
curl_setopt( $ch, CURLOPT_FILE, $fp );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_exec( $ch );
curl_close( $ch );
fclose( $fp );
$data = $connection->api( '/' . $uid );
$login = $data['username'];
$email = $data['email'];
if(
empty( $login )
|| eZUser::fetchByName( $login ) instanceof eZUser
) {
$login = 'FacebookUser_' . $uid;
}
if( empty( $email ) ) {
$email = $uid . '@nospam.facebook.com';
}
return array(
'image' => $picture,
'user_account' => self::getUserAccountString( $login, $email ),
'first_name' => $data['first_name'],
'last_name' => $data['last_name']
);
}
private function getFacebookConnection() {
return new Facebook(
array(
'appId' => $this->OAunth2Connection->appSettings['key'],
'secret' => $this->OAunth2Connection->appSettings['secret']
)
);
}
}
?>