forked from Islandora/islandora
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathConnectionHelper.inc
112 lines (97 loc) · 2.85 KB
/
ConnectionHelper.inc
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
<?php
/**
* @file
* Connection Helper Class
*/
module_load_include('inc', 'ConnectionHelper', '');
/**
* Connection Helper Class ??
*/
class ConnectionHelper {
/**
* Constructor
*/
function ConnectionHelper() {
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
}
/**
* fixURL ??
* @param type $url
* @param type $_name
* @param type $_pass
* @return string
*/
function _fixURL($url, $_name, $_pass) {
if (empty($url)) {
$url = variable_get('fedora_soap_url', 'http://localhost:8080/fedora/services/access?wsdl');
}
$creds = urlencode($_name) . ':' . urlencode($_pass);
if (strpos($url, 'http://') === 0) {
$new_url = 'http://' . $creds . '@' . substr($url, 7);
}
elseif (strpos($url, 'https://') === 0) {
$new_url = 'https://' . $creds . '@' . substr($url, 8);
}
else {
drupal_set_message(t('Invalid URL: !url', array('!url' => $url)));
return NULL;
}
return $new_url;
}
/**
* getSoapClient
* @global type $user
* @param type $url
* @param type $exceptions
* @return SoapClient
*/
function getSoapClient($url = NULL, $exceptions = TRUE) {
if (empty($url)) {
$url = variable_get('fedora_soap_url', 'http://localhost:8080/fedora/services/access?wsdl');
}
global $user;
if ($user->uid == 0) {
//anonymous user. We will need an entry in the fedora users.xml file
//with the appropriate entry for a username of anonymous password of anonymous
try {
$client = new SoapClient($url, array(
'login' => 'anonymous',
'password' => 'anonymous',
'exceptions' => $exceptions,
'authentication' => SOAP_AUTHENTICATION_BASIC
));
} catch (SoapFault $e) {
drupal_set_message(t('@e', array('@e' => check_plain($e->getMessage()))));
return NULL;
}
}
else {
try {
$client = new SoapClient($url, array(
'login' => $user->name,
'password' => $user->pass,
'exceptions' => TRUE,
'authentication' => SOAP_AUTHENTICATION_BASIC,
'cache_wsdl' => WSDL_CACHE_MEMORY
));
} catch (SoapFault $e) {
drupal_set_message(t('@e', array('@e' => check_plain($e->getMessage()))));
return NULL;
}
}
if (isset($_SESSION['islandora_soapcookies'])) {
// just set the cookies
$client->_cookies = ($_SESSION['islandora_soapcookies']);
}
else {
try {
//we need to make a call to set the cookie this extra call would only happen once per session
$client->__soapCall('describeRepository', array());
$_SESSION['islandora_soapcookies'] = $client->_cookies;
} catch (exception $e) {
//connection is tested elsewhere so eat this for now here we just want the cookie
}
}
return $client;
}
}