Facebook::lastNameNormalizer()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 4
rs 10
cc 2
eloc 2
nc 2
nop 1
1
<?php
2
3
/*
4
 * This file is part of the Oryzone PHPoAuthUserData package <https://github.com/Oryzone/PHPoAuthUserData>.
5
 *
6
 * (c) Oryzone, developed by Luciano Mammino <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace OAuth\UserData\Extractor;
13
14
use OAuth\UserData\Utils\ArrayUtils;
15
use OAuth\UserData\Utils\StringUtils;
16
17
/**
18
 * Class Facebook
19
 * @package OAuth\UserData\Extractor
20
 */
21
class Facebook extends LazyExtractor
22
{
23
24
    /**
25
     * Request contants
26
     */
27
    const REQUEST_PROFILE = '/me';
28
    const REQUEST_IMAGE = '/me/picture?type=large&redirect=false';
29
30
    /**
31
     * Constructor
32
     */
33
    public function __construct()
34
    {
35
        parent::__construct(self::getLoadersMap(), self::getNormalizersMap(), self::getAllFields());
36
    }
37
38
    protected static function getLoadersMap()
39
    {
40
        return array_merge(self::getDefaultLoadersMap(), array(
41
            self::FIELD_IMAGE_URL => 'image',
42
        ));
43
    }
44
45
    public static function getNormalizersMap()
46
    {
47
        return array_merge(self::getDefaultNormalizersMap(), array(
48
            self::FIELD_IMAGE_URL => null,
49
        ));
50
    }
51
52
    protected function profileLoader()
53
    {
54
        return json_decode($this->service->request(self::REQUEST_PROFILE), true);
55
    }
56
57
    protected function imageLoader()
58
    {
59
        $rawPicture = json_decode($this->service->request(self::REQUEST_IMAGE), true);
60
        if (isset($rawPicture['data'], $rawPicture['data']['url'])) {
61
            return $rawPicture['data']['url'];
62
        }
63
64
        return null;
65
    }
66
67
    protected function uniqueIdNormalizer($data)
68
    {
69
        return $data['id'];
70
    }
71
72
    protected function usernameNormalizer($data)
73
    {
74
        return isset($data['username']) ? $data['username'] : null;
75
    }
76
77
    protected function firstNameNormalizer($data)
78
    {
79
        return isset($data['first_name']) ? $data['first_name'] : null;
80
    }
81
82
    protected function lastNameNormalizer($data)
83
    {
84
        return isset($data['last_name']) ? $data['last_name'] : null;
85
    }
86
87
    protected function fullNameNormalizer($data)
88
    {
89
        return isset($data['name']) ? $data['name'] : null;
90
    }
91
92
    protected function emailNormalizer($data)
93
    {
94
        return isset($data['email']) ? $data['email'] : null;
95
    }
96
97
    protected function descriptionNormalizer($data)
98
    {
99
        return isset($data['bio']) ? $data['bio'] : null;
100
    }
101
102
    protected function profileUrlNormalizer($data)
103
    {
104
        return isset($data['link']) ? $data['link'] : null;
105
    }
106
107
    protected function locationNormalizer($data)
108
    {
109
        return isset($data['location']['name']) ? $data['location']['name'] : null;
110
    }
111
112
    protected function websitesNormalizer($data)
113
    {
114
        return isset($data['website']) ? StringUtils::extractUrls($data['website']) : array();
115
    }
116
117
    public function verifiedEmailNormalizer()
118
    {
119
        return true; // Facebook users who have access to Open Graph and OAuth always have a verified email
120
    }
121
122
    protected function extraNormalizer($data)
123
    {
124
        return ArrayUtils::removeKeys($data, array(
125
            'id',
126
            'username',
127
            'first_name',
128
            'last_name',
129
            'name',
130
            'email',
131
            'bio',
132
            'link',
133
            'location',
134
            'website',
135
        ));
136
    }
137
}
138