|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
namespace Kuleuven\AuthenticationBundle\Service; |
|
4
|
|
|
|
|
5
|
|
|
class PersonDataService |
|
6
|
|
|
{ |
|
7
|
|
|
protected $url; |
|
8
|
|
|
|
|
9
|
|
|
public function __construct($url = 'https://webwsp.aps.kuleuven.be/esap/public/odata/sap/zh_person_srv/Persons(\'%s\')?$format=json&$expand=WorkAddresses') |
|
10
|
|
|
{ |
|
11
|
|
|
$this->url = $url; |
|
12
|
|
|
} |
|
13
|
|
|
|
|
14
|
|
|
public function getPersonData($uid) |
|
15
|
|
|
{ |
|
16
|
|
|
$url = sprintf($this->url, str_replace('u', '0', $uid)); |
|
17
|
|
|
$ch = curl_init(); |
|
18
|
|
|
curl_setopt($ch, CURLOPT_URL, $url); |
|
19
|
|
|
curl_setopt($ch, CURLOPT_HEADER, false); |
|
20
|
|
|
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); |
|
21
|
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); |
|
22
|
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); |
|
23
|
|
|
$output = curl_exec($ch); |
|
24
|
|
|
$error = curl_error($ch); |
|
25
|
|
|
curl_close($ch); |
|
26
|
|
|
if (false === $output) { |
|
27
|
|
|
throw new \Exception('Could not get person data for ' . $uid . ': ' . $error); |
|
28
|
|
|
} |
|
29
|
|
|
$decodedOutput = json_decode($output); |
|
30
|
|
|
if (null === $decodedOutput) { |
|
31
|
|
|
throw new \Exception('Could not get person data for ' . $uid . ': ' . json_last_error_msg()); |
|
32
|
|
|
} |
|
33
|
|
|
if (0 === count($decodedOutput->d)) { |
|
34
|
|
|
throw new \Exception('Could not get person data for ' . $uid . ': ' . json_encode($decodedOutput)); |
|
35
|
|
|
} |
|
36
|
|
|
$user = $decodedOutput->d; |
|
37
|
|
|
$mainWorkAddresses = array_filter($user->WorkAddresses->results, function (\stdClass $value) { |
|
38
|
|
|
return $value->isMainWorkAddress; |
|
39
|
|
|
}); |
|
40
|
|
|
$mainWorkAddress = reset($mainWorkAddresses); |
|
41
|
|
|
if (!empty($mainWorkAddress)) { |
|
42
|
|
|
$workAddress = [ |
|
43
|
|
|
'phone' => $mainWorkAddress->phone, |
|
44
|
|
|
'label' => $mainWorkAddress->buildingDescription, |
|
45
|
|
|
'street' => $mainWorkAddress->street, |
|
46
|
|
|
'number' => $mainWorkAddress->houseNr, |
|
47
|
|
|
'postalCode' => $mainWorkAddress->postalCode, |
|
48
|
|
|
'city' => $mainWorkAddress->city, |
|
49
|
|
|
'province' => null, |
|
50
|
|
|
'country' => null, |
|
51
|
|
|
]; |
|
52
|
|
|
} else { |
|
53
|
|
|
$workAddress = null; |
|
54
|
|
|
} |
|
55
|
|
|
$userData = [ |
|
56
|
|
|
'username' => $uid, |
|
57
|
|
|
'primaryEmail' => $user->preferredMailAddress, |
|
58
|
|
|
'firstName' => !empty($user->firstName) ? $user->firstName : $user->preferredName, |
|
59
|
|
|
'lastName' => $user->surname, |
|
60
|
|
|
'title' => !empty($user->title) ? $user->title : null, |
|
61
|
|
|
'sexe' => $user->gender, |
|
62
|
|
|
'birthDate' => null, |
|
63
|
|
|
'birthLocation' => null, |
|
64
|
|
|
'birthCountry' => null, |
|
65
|
|
|
'nationality' => null, |
|
66
|
|
|
'correspondenceLanguage' => null, |
|
67
|
|
|
'picture' => !empty($user->pictureUrl) ? $user->pictureUrl : null, |
|
68
|
|
|
'privateEmail' => null, |
|
69
|
|
|
'mobilePhoneNumber' => $user->mobilePhone, |
|
70
|
|
|
'workAddress' => $workAddress, |
|
71
|
|
|
]; |
|
72
|
|
|
return $userData; |
|
73
|
|
|
} |
|
74
|
|
|
} |
|
75
|
|
|
|