# This patch file was generated by NetBeans IDE
# This patch can be applied using context Tools: Apply Diff Patch action on respective folder.
# It uses platform neutral UTF-8 encoding.
# Above lines and this line are ignored by the patching process.
Index: contributions/modules/soapclient/modules/soapclient/soapclient.install
--- contributions/modules/soapclient/modules/soapclient/soapclient.install No Base Revision
+++ contributions/modules/soapclient/modules/soapclient/soapclient.install Locally New
@@ -0,0 +1,71 @@
+ $t('SOAP Client'),
+ 'value' => $t('PHP5 SOAP or nuSOAP')
+ );
+
+ //Find if nuSOAP library is installed
+ $searchdir[] = './sites/all';
+ $searchdir[] = './'. conf_path();
+
+ //Get current list of nusoap libraries installed. Just looks for nusoap.php file
+ $nusoap_libs = array();
+ foreach ($searchdir as $dir) {
+ $nusoap_libs = array_merge($nusoap_libs, file_scan_directory($dir, "nusoap\.php$"));
+ }
+
+ if (!count($nusoap_libs) && !extension_loaded('soap')) {
+ $requirements['soapclient']['severity'] = REQUIREMENT_ERROR;
+ $requirements['soapclient']['value'] = $t('Neither nuSOAP nor PHP5 SOAP are available for this system');
+ $requirements['soapclient']['description'] = $t('Soapclient module needs nuSOAP or PHP5 SOAP extension available. Currently, any of these two libraries was found installed. Please, follow the instructions about installing nuSOAP or '.
+ 'enabling SOAP extension if you are using PHP5 in the documentation.');
+ }
+
+ if ( count($nusoap_libs) && !file_exists(variable_get('soapclient_nusoap_path', '')) ) {
+ $requirements['soapclient']['severity'] = REQUIREMENT_WARNING;
+ $requirements['soapclient']['value'] = $t('A nuSOAP library has been detected in the system, but is not configured to be used by the Soap Client module.');
+ $requirements['soapclient']['description'] = $t('Please, !configure the SoapClient module to use this library path:
!lib',
+ array(
+ '!configure' => l('configure', 'admin/settings/soapclient'),
+ '!lib' => reset($nusoap_libs)->filename)
+ );
+ }
+
+ return $requirements;
+}
Index: contributions/modules/soapclient/modules/soapclient/soapclient.module
--- contributions/modules/soapclient/modules/soapclient/soapclient.module Base (1.1.2.3)
+++ contributions/modules/soapclient/modules/soapclient/soapclient.module Locally Modified (Based On 1.1.2.3)
@@ -16,57 +16,12 @@
* --------------------------------- */
/**
- * Implementation of hook_requirements();
- */
-function soapclient_requirements($phase) {
- $t = get_t();
-
- // check for SOAP library
- $requirements['soapclient'] = array(
- 'title' => $t('SOAP Client'),
- 'value' => $t('PHP5 SOAP or nuSOAP')
- );
-
- if (!file_exists(realpath(dirname(__FILE__) .'/nusoap/nusoap.php')) && !extension_loaded('soap')) {
- $requirements['soapclient']['severity'] = REQUIREMENT_ERROR;
- $requirements['soapclient']['value'] = $t('Neither nuSOAP nor PHP5 SOAP exist');
- $requirements['soapclient']['description'] = $t('Reinstall full package of soapclient.module, or '.
- 'enabling SOAP extension, if you are using PHP5');
- }
-
- return $requirements;
-}
-
-/**
* Implementation of hook_init();
*/
function soapclient_init() {
- global $_soapclient_LIBRARY;
global $_soapclient_MCRYPT;
global $_soapclient_AES128;
- switch ( variable_get('soapclient_lib', 'auto') ) {
- case 'auto':
- // check for PHP5SOAP first, the load
- // the nuSOAP, if PHP5SOAP not available.
-
- case 'PHP5SOAP':
- if ( extension_loaded('soap') ) {
- $_soapclient_LIBRARY = 'PHP5SOAP';
- break;
- }
- // no PHP5SOAP, loading nuSOAP
-
- case 'nuSOAP':
- require_once('nusoap/nusoap.php');
- require_once('nusoap/class.wsdlcache.php');
- $_soapclient_LIBRARY = 'nuSOAP';
- break;
- }
-
- // load wrapper class
- require_once('lib/drupal_soap_client.inc');
-
// check, which encryption library to be used.
$_soapclient_MCRYPT = NULL;
$_soapclient_AES128 = NULL;
@@ -169,6 +124,29 @@
return $output;
}
+/**
+ * Traverse the sites/all and sites/%current_site directories looking for any
+ * installed version of the nuSOAP library.
+ *
+ * @return
+ * Array of nusoap libraries found in the system
+ */
+function soapclient_find_nusoap_library() {
+ //find installed nuSOAP libraries in sites/%current_site and sites/all. Give
+ //prio to sites/all/* files, then current site directory, then default. See
+ //includes/boostrap.inc for conf_path()
+ $searchdir[] = './sites/all';
+ $searchdir[] = './'. conf_path();
+
+ //Get current list of nusoap libraries installed. Just looks for nusoap.php file
+ $nusoap_libs = array();
+ foreach ($searchdir as $dir) {
+ $nusoap_libs = array_merge($nusoap_libs, file_scan_directory($dir, "nusoap\.php$"));
+ }
+ return $nusoap_libs;
+}
+
+
// configuration form
function soapclient_config() {
global $_soapclient_LIBRARY;
@@ -203,10 +181,35 @@
array('!lib' => t($libinfo['desc']) )),
);
+ //Find all the possible installed version of nuSOAP library
+ $nusoap_libs = soapclient_find_nusoap_library();
+
+ //@TODO: If phpsoap is not enabled, and auto or nusoap have been selected, and no nusoap is detected, drop a message
+ //Addecuate a message for the admin to configure nuSOAP library.
+ if (count($nusoap_libs)) {
+ foreach ($nusoap_libs as $lib) {
+ $locations .= $lib->filename ."\n";
+ }
+ }
+
+ //get the first occurrence of nusoap.php from the scan results
+ $default_library = (is_array($nusoap_libs) && count($nusoap_libs)) ? reset($nusoap_libs)->filename : NULL;
+
+ $form['soapclient_nusoap_path'] = array(
+ '#type' => 'textfield',
+ '#title' => t('nuSOAP location'),
+ '#size' => 120,
+ '#maxlength' => 255,
+ '#default_value' => variable_get('soapclient_nusoap_path', $default_library),
+ '#description' => t('The location of the nusoap library. '.
+ 'This is the result of the nuSOAP library SCAN:
!lib
',
+ array('!lib' => !empty($locations) ? $locations : "nuSOAP library Not found." )),
+ );
+
$form['soapclient_proxyhost'] = array(
'#type' => 'textfield',
'#title' => t('Proxy Host'),
- '#size' => 120,
+ '#size' => 32,
'#maxlength' => 256,
'#default_value' => variable_get('soapclient_proxyhost', ''),
'#description' => t('Enter the IP address or host name of the proxy server between '.
@@ -272,7 +275,7 @@
'#size' => 64,
'#maxlength' => 255,
'#default_value' => variable_get('soapclient_wsdlcache_path', variable_get('file_directory_temp', NULL)),
- '#description' => t('Enter the directory to allow nuSOAP keep it\'s WSDL cache. Note that the '.
+ '#description' => t('Enter the directory to allow soap client keep it\'s WSDL cache. Note that the '.
'read/write permission is required.'),
);
@@ -428,7 +431,7 @@
* - 'desc' : Full name of the library/extension.
*/
function soapclient_get_libname() {
- global $_soapclient_LIBRARY;
+ $_soapclient_LIBRARY = variable_get('soapclient_lib', 'auto');
$info = array();
switch ($_soapclient_LIBRARY) {
@@ -533,8 +536,19 @@
* for more details.
*/
function soapclient_init_client($endpoint, $use_wsdl, $options = array()) {
- global $_soapclient_LIBRARY;
+ $_soapclient_LIBRARY = variable_get('soapclient_lib', 'auto');
+ //Convert 'auto' detection library into a real library
+ if (variable_get('soapclient_lib', 'auto') == 'auto') {
+ //check for PHP5SOAP first, use nuSOAP if PHP5SOAP not available.
+ if ( extension_loaded('soap') ) {
+ $_soapclient_LIBRARY = 'PHP5SOAP';
+ }
+ else {
+ $_soapclient_LIBRARY = 'nuSOAP';
+ }
+ }
+
$client = NULL;
$result = array();
$result['#error'] = FALSE;
@@ -568,7 +582,26 @@
if (soapclient_empty_string($proxypass)) $proxypass = NULL;
if ( $_soapclient_LIBRARY == 'nuSOAP' ) {
- // prepare parameters for initialisation
+
+ //Checks for correct nuSOAP configuration.
+ //Check if library is configured.
+ $nusoap_location = variable_get('soapclient_nusoap_path', '');
+ if ( soapclient_empty_string($nusoap_location) ) {
+ $result['#error'] = t('nuSOAP library is not configured.');
+ return $result;
+ }
+
+ //Check if library is really there
+ if ( !file_exists($nusoap_location) ) {
+ $result['#error'] = t('nuSOAP library is not available at !lib!', array('!lib' => $_soapclient_LIBRARY) );
+ return $result;
+ }
+
+ //Load required library and cache classes.
+ require_once($nusoap_location);
+ require_once(str_replace('nusoap.php', 'class.wdslcache.php', $nusoap_location));
+
+ //prepare parameters for initialisation
$reqtimeout = variable_get('soapclient_reqtimeout', 10);
$reptimeout = variable_get('soapclient_reptimeout', 30);
@@ -596,6 +629,13 @@
}
}
elseif ( $_soapclient_LIBRARY == 'PHP5SOAP' ) {
+
+ //Check PHP5SOAP module availability
+ if ( !extension_loaded('soap') ) {
+ $result['#error'] = t('PHP5 SOAP was the selected library to use by Soap Client module, but the extension is not enabled. Please follow the documentation of how to enable PHP5 SOAP extension.');
+ return $result;
+ }
+
\ No newline at end of file
if ( ! $use_wsdl ) {
if ( empty($options['namespace']) ) {
$result['#error'] = t('Target namespace uri is required when using non-WSDL mode of PHP5 SOAP');