You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

95 lines
3.0 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
// This script may only be included - so it's better to die if called directly.
if (strpos($_SERVER["SCRIPT_NAME"], basename(__FILE__)) !== false) {
header("location: index.php");
die;
}
class Tiki_Soap
{
private $cookies;
public $allowCookies; // boolean. If true, (session) cookies are handled
public function __construct()
{
$this->cookies = [];
$this->allowCookies = false;
}
/*
* If fullResponse = true, "out" parameters from .NET calls are included in the response.
* If false, only the <request>Response part of the reply is included.
*/
public function performRequest($wsdl, $operation, $params, $options = [ 'encoding' => 'UTF-8' ], $fullReponse = false)
{
if (! extension_loaded('soap')) {
return 'Extension SOAP not found';
}
if (! isset($options['soap_version'])) {
$options['soap_version'] = SOAP_1_1;
}
$client = new Laminas\Soap\Client($wsdl, $options);
$soap_params = [];
foreach ($params as $param_name => $param_value) {
preg_match('/^(.*)\:(.*)$/', $param_name, $matches);
if (count($matches) == 3) {
if (! isset($soap_params[$matches[1]])) {
$soap_params[$matches[1]] = [];
}
$soap_params[$matches[1]][$matches[2]] = $param_value;
} else {
$soap_params[$param_name] = $param_value;
}
}
try {
// Set (Session) cookies before the call
if ($this->allowCookies) {
if (is_array($this->cookies)) {
foreach ($this->cookies as $cookieName => $cookieValue) {
$client->setCookie($cookieName, $cookieValue[0]);
}
}
}
// Perform the SOAP request
$result = call_user_func_array([$client, $operation], $soap_params);
// Pick up any new cookies from the server
if ($this->allowCookies) {
$last_response = $client->getLastResponseHeaders();
$soapClt = $client->getSoapClient();
$this->cookies = array_merge($soapClt->_cookies, $this->cookies);
}
} catch (SoapFault $e) {
trigger_error($e->getMessage());
return $e->getMessage();
}
// Unless the full response result is specified, only reply the returned result, and not the "out" parameter results
if (is_object($result) && ! $fullReponse) {
$result_name = $operation . 'Result';
if (isset($result->$result_name)) {
return $result->$result_name;
}
}
return $result;
}
}
global $soaplib;
$soaplib = new Tiki_Soap();