Inheritance diagram for ilBMFBase:
Collaboration diagram for ilBMFBase:Public Member Functions | |
| ilBMFBase ($faultcode= 'Client') | |
| Constructor. | |
| _resetNamespaces () | |
| _setSchemaVersion ($schemaVersion) | |
| _setSchemaVersion | |
| & | _raiseSoapFault ($str, $detail= '', $actorURI= '', $code=null, $mode=null, $options=null, $skipmsg=false) |
| Raise a soap error. | |
| __isfault () | |
| & | __getfault () |
| _debug ($string) | |
| maintains a string of debug data | |
| _getNamespacePrefix ($ns) | |
| _getNamespaceForPrefix ($prefix) | |
| _isSoapValue (&$value) | |
| _serializeValue (&$value, $name= '', $type=false, $elNamespace=NULL, $typeNamespace=NULL, $options=array(), $attributes=array(), $artype='', $OBJTypeNS=array()) | |
| _getType (&$value) | |
| ilBMF::Value::_getType | |
| _multiArrayType (&$value, &$type, &$size, &$xml) | |
| _isBase64 (&$value) | |
| _isHash (&$a) | |
| & | _un_htmlentities ($string) |
| & | _decode (&$soapval) |
| & | _makeEnvelope (&$method, &$headers, $encoding=SOAP_DEFAULT_ENCODING, $options=array()) |
| creates the soap envelope with the soap envelop data | |
| _makeMimeMessage (&$xml, $encoding=SOAP_DEFAULT_ENCODING) | |
| _makeDIMEMessage (&$xml) | |
| _decodeMimeMessage (&$data, &$headers, &$attachments) | |
| _decodeDIMEMessage (&$data, &$headers, &$attachments) | |
| __set_type_translation ($type, $class=NULL) | |
Data Fields | |
| $_XMLSchema = array('http://www.w3.org/2001/XMLSchema', 'http://www.w3.org/1999/XMLSchema') | |
| $_XMLSchemaVersion = 'http://www.w3.org/2001/XMLSchema' | |
| $_typemap | |
| $_namespaces | |
| $_ns_count = 0 | |
| $_encodings = array('ISO-8859-1','US-ASCII','UTF-8') | |
| $_xmlEntities = array ( '&' => '&', '<' => '<', '>' => '>', "'" => ''', '"' => '"' ) | |
| $_doconversion = FALSE | |
| $__attachments = array() | |
| $_debug_flag = false | |
| $_debug_data = '' | |
| $_myfaultcode = '' | |
| $fault = NULL | |
| $_wsdl = NULL | |
| $_section5 = TRUE | |
| $_auto_translation = false | |
| $_type_translation = array() | |
Definition at line 121 of file class.ilBMFBase.php.
| & ilBMFBase::__getfault | ( | ) |
Definition at line 331 of file class.ilBMFBase.php.
{
return $this->fault;
}
| ilBMFBase::__isfault | ( | ) |
Definition at line 326 of file class.ilBMFBase.php.
{
return $this->fault != NULL;
}
| ilBMFBase::__set_type_translation | ( | $ | type, | |
| $ | class = NULL | |||
| ) |
| ilBMFBase::_debug | ( | $ | string | ) |
maintains a string of debug data
| debugging | message - sometimes an error message |
Definition at line 341 of file class.ilBMFBase.php.
{
if ($this->_debug_flag) {
$this->_debug_data .= get_class($this) . ': ' . preg_replace("/>/", ">\r\n", $string) . "\n";
}
}
| & ilBMFBase::_decode | ( | &$ | soapval | ) |
| mixed |
Definition at line 854 of file class.ilBMFBase.php.
References $counter, $t, and _isSoapValue().
Referenced by ilBMFClient::__decodeResponse().
{
global $SOAP_OBJECT_STRUCT;
if (!$this->_isSoapValue($soapval)) {
return $soapval;
} else if (is_array($soapval->value)) {
if ($SOAP_OBJECT_STRUCT && $soapval->type != 'Array') {
$classname = 'stdClass';
if (isset($this->_type_translation[$soapval->tqn->fqn()])) {
// this will force an error in php if the
// class does not exist
$classname = $this->_type_translation[$soapval->tqn->fqn()];
} else if (isset($this->_type_translation[$soapval->type])) {
// this will force an error in php if the
// class does not exist
$classname = $this->_type_translation[$soapval->type];
} else if ($this->_auto_translation) {
if (class_exists($soapval->type)) {
$classname = $soapval->type;
} else if ($this->_wsdl) {
$t = $this->_wsdl->getComplexTypeNameForElement($soapval->name, $soapval->namespace);
if ($t && class_exists($t)) $classname = $t;
}
}
$return = new $classname;
} else {
$return = array();
}
$counter = 1;
$isstruct = !$SOAP_OBJECT_STRUCT || !is_array($return);
foreach ($soapval->value as $item) {
if (is_object($return)) {
if ($this->_wsdl) {
// get this childs wsdl information
// /$soapval->ns/$soapval->type/$item->ns/$item->name
$child_type = $this->_wsdl->getComplexTypeChildType(
$soapval->namespace,
$soapval->name,
$item->namespace,
$item->name);
if ($child_type) $item->type = $child_type;
}
if (!$isstruct || $item->type == 'Array') {
if (isset($return->{$item->name}) &&
is_object($return->{$item->name})) {
$return->{$item->name} = $this->_decode($item);
} else if (isset($return->{$item->name}) &&
is_array($return->{$item->name})) {
$return->{$item->name}[] = $this->_decode($item);
} else if (is_array($return)) {
$return[] = $this->_decode($item);
} else {
$return->{$item->name} = $this->_decode($item);
}
} else if (isset($return->{$item->name})) {
$isstruct = FALSE;
if (count(get_object_vars($return)) == 1) {
$return = array($return->{$item->name}, $this->_decode($item));
} else {
$return->{$item->name} = array($return->{$item->name}, $this->_decode($item));
}
} else {
$return->{$item->name} = $this->_decode($item);
}
/* set the attributes as members in the class */
if (method_exists($return,'__set_attribute')) {
foreach ($soapval->attributes as $key=>$value) {
call_user_func_array(array(&$return,'__set_attribute'),array($key,$value));
}
}
} else {
if ($soapval->arrayType && $this->_isSoapValue($item)) {
$item->type = $soapval->arrayType;
}
if (!$isstruct) {
$return[] = $this->_decode($item);
} else if (isset($return[$item->name])) {
$isstruct = FALSE;
$return = array($return[$item->name], $this->_decode($item));
} else {
$return[$item->name] = $this->_decode($item);
}
}
}
return $return;
}
if ($soapval->type == 'boolean') {
if ($soapval->value != '0' && strcasecmp($soapval->value,'false') !=0) {
$soapval->value = TRUE;
} else {
$soapval->value = FALSE;
}
} else if ($soapval->type && array_key_exists($soapval->type, $this->_typemap[SOAP_XML_SCHEMA_VERSION])) {
# if we can, lets set php's variable type
settype($soapval->value, $this->_typemap[SOAP_XML_SCHEMA_VERSION][$soapval->type]);
}
return $soapval->value;
}
Here is the call graph for this function:
Here is the caller graph for this function:| ilBMFBase::_decodeDIMEMessage | ( | &$ | data, | |
| &$ | headers, | |||
| &$ | attachments | |||
| ) |
Definition at line 1107 of file class.ilBMFBase.php.
References $data.
Referenced by ilBMFTransport_HTTP::_parseResponse().
{
global $SOAP_options;
if (!isset($SOAP_options['DIME'])) {
$this->_raiseSoapFault('DIME Unsupported, install PEAR::Net::DIME','','','Server');
}
// XXX this SHOULD be moved to the transport layer, e.g. PHP itself
// should handle parsing DIME ;)
$dime = new Net_DIME_Message();
$dime->decodeData($data);
if (strcasecmp($dime->parts[0]['type'],SOAP_ENVELOP) !=0 ||
strcasecmp($dime->parts[0]['type'],SOAP_ENVELOP) !=0) {
$this->_raiseSoapFault('Dime record 1 is not a SOAP envelop!','','','Server');
} else {
$data = $dime->parts[0]['data'];
$headers['content-type'] = 'text/xml'; // fake it for now
$c = count($dime->parts);
for ($i = 0; $i < $c; $i++) {
$part =& $dime->parts[$i];
// XXX we need to handle URI's better
$attachments['cid:'.$part['id']] = $part['data'];
}
}
}
Here is the caller graph for this function:| ilBMFBase::_decodeMimeMessage | ( | &$ | data, | |
| &$ | headers, | |||
| &$ | attachments | |||
| ) |
Definition at line 1062 of file class.ilBMFBase.php.
References $data, and $params.
Referenced by ilBMFTransport_HTTP::_parseResponse().
{
global $SOAP_options;
if (!isset($SOAP_options['Mime'])) {
$this->_raiseSoapFault('Mime Unsupported, install PEAR::Mail::Mime','','','Server');
return;
}
$params['include_bodies'] = TRUE;
$params['decode_bodies'] = TRUE;
$params['decode_headers'] = TRUE;
// XXX lame thing to have to do for decoding
$decoder = new Mail_mimeDecode($data);
$structure = $decoder->decode($params);
if (isset($structure->body)) {
$data = $structure->body;
$headers = $structure->headers;
return;
} else if (isset($structure->parts)) {
$data = $structure->parts[0]->body;
$headers = array_merge($structure->headers,$structure->parts[0]->headers);
if (count($structure->parts) > 1) {
$mime_parts = array_splice($structure->parts,1);
// prepare the parts for the soap parser
$c = count($mime_parts);
for ($i = 0; $i < $c; $i++) {
$p =& $mime_parts[$i];
if (isset($p->headers['content-location'])) {
// XXX TODO: modify location per SwA note section 3
// http://www.w3.org/TR/SOAP-attachments
$attachments[$p->headers['content-location']] = $p->body;
} else {
$cid = 'cid:'.substr($p->headers['content-id'],1,strlen($p->headers['content-id'])-2);
$attachments[$cid] = $p->body;
}
}
}
return;
}
$this->_raiseSoapFault('Mime parsing error','','','Server');
}
Here is the caller graph for this function:| ilBMFBase::_getNamespaceForPrefix | ( | $ | prefix | ) |
Definition at line 359 of file class.ilBMFBase.php.
Referenced by ilBMFParser::startElement().
{
$flipped = array_flip($this->_namespaces);
if (array_key_exists($prefix,$flipped)) {
return $flipped[$prefix];
}
return NULL;
}
Here is the caller graph for this function:| ilBMFBase::_getNamespacePrefix | ( | $ | ns | ) |
Definition at line 348 of file class.ilBMFBase.php.
Referenced by _serializeValue(), and ilBMFParser::startElement().
{
if (array_key_exists($ns,$this->_namespaces)) {
return $this->_namespaces[$ns];
}
$prefix = 'ns'.count($this->_namespaces);
$this->_namespaces[$ns] = $prefix;
return $prefix;
return NULL;
}
Here is the caller graph for this function:| ilBMFBase::_getType | ( | &$ | value | ) |
ilBMF::Value::_getType
convert php type to soap type
| string | value |
Definition at line 691 of file class.ilBMFBase.php.
References $type, _isBase64(), _isHash(), and _isSoapValue().
Referenced by _multiArrayType(), and _serializeValue().
{
global $SOAP_OBJECT_STRUCT,$SOAP_RAW_CONVERT;
$type = gettype($value);
switch ($type) {
case 'object':
if (is_a($value,'ilbmfvalue')) {
$type = $value->type;
} else {
$type = 'Struct';
}
break;
case 'array':
// XXX hashes always get done as structs by pear::soap
if ($this->_isHash($value)) {
$type = 'Struct';
} else {
$ar_size = count($value);
if ($ar_size > 0 && is_a($value[0],'ilbmfvalue')) {
// fixme for non-wsdl structs that are all teh same type
if ($ar_size > 1 &&
$this->_isSoapValue($value[0]) &&
$this->_isSoapValue($value[1]) &&
$value[0]->name != $value[1]->name) {
// this is a struct, not an array
$type = 'Struct';
} else {
$type = 'Array';
}
} else {
$type = 'Array';
}
}
break;
case 'integer':
case 'long':
$type = 'int';
break;
case 'boolean':
#$value = $value?'true':'false';
break;
case 'double':
$type = 'decimal'; // double is deprecated in 4.2 and later
break;
case 'NULL':
$type = '';
break;
case 'string':
if (!$SOAP_RAW_CONVERT)
{
if (is_numeric($value))
{
/* if (strstr($value,'.'))
$type = 'float';
else
$type = 'int'; */
}
else
{
/* if (ilBMFType_hexBinary::is_hexbin($value))
{
$type = 'hexBinary';
}
else */
{
if ($this->_isBase64($value))
{
$type = 'base64Binary';
}
else
{
$dt = new ilBMFType_dateTime($value);
if ($dt->toUnixtime() != -1)
{
$type = 'dateTime';
#$value = $dt->toSOAP();
}
}
}
}
}
default:
break;
}
return $type;
}
Here is the call graph for this function:
Here is the caller graph for this function:| ilBMFBase::_isBase64 | ( | &$ | value | ) |
| string |
Definition at line 811 of file class.ilBMFBase.php.
Referenced by _getType().
{
$l = strlen($value);
if ($l > 0)
return $value[$l-1] == '=' && preg_match("/[A-Za-z=\/\+]+/",$value);
return FALSE;
}
Here is the caller graph for this function:| ilBMFBase::_isHash | ( | &$ | a | ) |
| mixed |
Definition at line 824 of file class.ilBMFBase.php.
References $t, and _isSoapValue().
Referenced by _getType().
{
# XXX I realy dislike having to loop through this in php code,
# realy large arrays will be slow. We need a C function to do this.
$names = array();
$it = 0;
foreach ($a as $k => $v) {
# checking the type is faster than regexp.
$t = gettype($k);
if ($t != 'integer') {
return TRUE;
} else if ($this->_isSoapValue($v)) {
$names[$v->name] = 1;
}
// if someone has a large hash they should realy be defining the type
if ($it++ > 10) return FALSE;
}
return count($names)>1;
}
Here is the call graph for this function:
Here is the caller graph for this function:| ilBMFBase::_isSoapValue | ( | &$ | value | ) |
Definition at line 368 of file class.ilBMFBase.php.
Referenced by _decode(), _getType(), _isHash(), and _serializeValue().
{
return is_object($value) &&
(get_class($value) == 'ilbmfvalue' ||
is_subclass_of($value,'ilbmfvalue'));
}
Here is the caller graph for this function:| ilBMFBase::_makeDIMEMessage | ( | &$ | xml | ) |
Definition at line 1038 of file class.ilBMFBase.php.
References $xml.
Referenced by ilBMFClient::__generate().
{
global $SOAP_options;
if (!isset($SOAP_options['DIME'])) {
return $this->_raiseSoapFault('DIME is not installed');
}
// encode any attachments
// see http://search.ietf.org/internet-drafts/draft-nielsen-dime-soap-00.txt
// now we have to DIME encode the message
$dime = new Net_DIME_Message();
$msg = $dime->encodeData($xml,SOAP_ENVELOP,NULL,NET_DIME_TYPE_URI);
// add the attachements
$c = count($this->__attachments);
for ($i=0; $i < $c; $i++) {
$attachment =& $this->__attachments[$i];
$msg .= $dime->encodeData($attachment['body'],$attachment['content_type'],$attachment['cid'],NET_DIME_TYPE_MEDIA);
}
$msg .= $dime->endMessage();
return $msg;
}
Here is the caller graph for this function:| & ilBMFBase::_makeEnvelope | ( | &$ | method, | |
| &$ | headers, | |||
| $ | encoding = SOAP_DEFAULT_ENCODING, |
|||
| $ | options = array() | |||
| ) |
creates the soap envelope with the soap envelop data
| string | $payload soap data (in xml) |
Definition at line 963 of file class.ilBMFBase.php.
References $xml.
Referenced by ilBMFClient::__generate(), and ilBMFTransport_SMTP::send().
{
$smsg = $header_xml = $ns_string = '';
if ($headers) {
$c = count($headers);
for ($i=0; $i < $c; $i++) {
$header_xml .= $headers[$i]->serialize($this);
}
$header_xml = "<SOAP-ENV:Header>\r\n$header_xml\r\n</SOAP-ENV:Header>\r\n";
}
if (!isset($options['input']) || $options['input'] == 'parse') {
if (is_array($method)) {
$c = count($method);
for ($i = 0; $i < $c; $i++) {
$smsg .= $method[$i]->serialize($this);
}
} else {
$smsg = $method->serialize($this);
}
} else {
$smsg = $method;
}
$body = "<SOAP-ENV:Body>\r\n".$smsg."\r\n</SOAP-ENV:Body>\r\n";
$a = 0;
foreach ($this->_namespaces as $k => $v)
{
if ($a > 3) break;
$ns_string .= " xmlns:$v=\"$k\"\r\n";
$a ++;
}
/* if use='literal', we do not put in the encodingStyle. This is denoted by
$this->_section5 being false.
XXX use can be defined at a more granular level than we are dealing with
here, so this does not work for all services.
*/
$xml = "<?phpxml version=\"1.0\" encoding=\"$encoding\"?>\r\n\r\n".
"<SOAP-ENV:Envelope $ns_string".
($this->_section5?" SOAP-ENV:encodingStyle=\"" . SOAP_SCHEMA_ENCODING . "\"":'').
">\r\n".
"$header_xml$body</SOAP-ENV:Envelope>\r\n";
return $xml;
}
Here is the caller graph for this function:| ilBMFBase::_makeMimeMessage | ( | &$ | xml, | |
| $ | encoding = SOAP_DEFAULT_ENCODING | |||
| ) |
Definition at line 1009 of file class.ilBMFBase.php.
Referenced by ilBMFClient::__generate().
{
global $SOAP_options;
if (!isset($SOAP_options['Mime'])) {
return $this->_raiseSoapFault('Mime is not installed');
}
// encode any attachments
// see http://www.w3.org/TR/SOAP-attachments
// now we have to mime encode the message
$params = array('content_type' => 'multipart/related; type=text/xml');
$msg = new Mail_mimePart('', $params);
// add the xml part
$params['content_type'] = 'text/xml';
$params['charset'] = $encoding;
$params['encoding'] = 'base64';
$msg->addSubPart($xml, $params);
// add the attachements
$c = count($this->__attachments);
for ($i=0; $i < $c; $i++) {
$attachment =& $this->__attachments[$i];
$msg->addSubPart($attachment['body'],$attachment);
}
return $msg->encode();
}
Here is the caller graph for this function:| ilBMFBase::_multiArrayType | ( | &$ | value, | |
| &$ | type, | |||
| &$ | size, | |||
| &$ | xml | |||
| ) |
Definition at line 777 of file class.ilBMFBase.php.
References $size, $type, $xml, _getType(), and _serializeValue().
Referenced by _serializeValue().
{
$sz = count($value);
if ($sz > 1) {
// seems we have a multi dimensional array, figure it out if we do
$c = count($value);
for ($i=0; $i<$c; $i++) {
$this->_multiArrayType($value[$i], $type, $size, $xml);
}
if ($size) {
$size = $sz.','.$size;
} else {
$size = $sz;
}
return 1;
} else {
if (is_object($value)) {
$type = $value->type;
$xml .= $value->serialize($this);
} else {
$type = $this->_getType($value);
$xml .= $this->_serializeValue($value,'item',$type);
}
}
$size = NULL;
return 1;
}
Here is the call graph for this function:
Here is the caller graph for this function:| & ilBMFBase::_raiseSoapFault | ( | $ | str, | |
| $ | detail = '', |
|||
| $ | actorURI = '', |
|||
| $ | code = null, |
|||
| $ | mode = null, |
|||
| $ | options = null, |
|||
| $ | skipmsg = false | |||
| ) |
Raise a soap error.
Please referr to the SOAP definition for an impression of what a certain parameter stands for.
Use $debug_flag to store errors to the member variable $debug_data
| string | error message | |
| string | detailed error message. | |
| string | actor | |
| mixed | ||
| mixed | ||
| mixed | ||
| boolean |
Definition at line 309 of file class.ilBMFBase.php.
Referenced by ilBMFClient::__decodeResponse(), ilBMFClient::__generate(), ilBMFClient::__parse(), ilBMFTransport_HTTP::_parseResponse(), ilBMFTransport_HTTP::_sendHTTP(), ilBMFTransport_HTTP::_sendHTTPS(), _setSchemaVersion(), ilBMFTransport_SMTP::_validateUrl(), ilBMFTransport_HTTP::_validateUrl(), ilBMFClient::addHeader(), ilBMFClient::call(), ilBMFWSDL_Cache::get(), ilBMFWSDL::getEndpoint(), ilBMFWSDL::getOperationData(), ilBMFWSDL::getPortName(), ilBMFParser::getResponse(), ilBMFClient::ilBMFClient(), ilBMFParser::ilBMFParser(), ilBMFTransport::ilBMFTransport(), ilBMFWSDL_Parser::parse(), ilBMFWSDL::parse(), ilBMFTransport_SMTP::send(), ilBMFTransport_HTTP::send(), ilBMFTransport::send(), ilBMFClient::setEncoding(), and ilBMFWSDL_Parser::startElement().
{
# pass through previous faults
if (is_object($str)) {
$this->fault = $str;
} else {
if (!$code) $code = $this->_myfaultcode;
$this->fault = new ilBMFFault($str,
$code,
$actorURI,
$detail,
$mode,
$options);
}
return $this->fault;
}
Here is the caller graph for this function:| ilBMFBase::_resetNamespaces | ( | ) |
Definition at line 262 of file class.ilBMFBase.php.
Referenced by ilBMFBase().
{
$this->_namespaces = array(
'http://schemas.xmlsoap.org/soap/envelope/' => 'SOAP-ENV',
'http://www.w3.org/2001/XMLSchema' => 'xsd',
'http://www.w3.org/2001/XMLSchema-instance' => 'xsi',
'http://schemas.xmlsoap.org/soap/encoding/' => 'SOAP-ENC');
}
Here is the caller graph for this function:| ilBMFBase::_serializeValue | ( | &$ | value, | |
| $ | name = '', |
|||
| $ | type = false, |
|||
| $ | elNamespace = NULL, |
|||
| $ | typeNamespace = NULL, |
|||
| $ | options = array(), |
|||
| $ | attributes = array(), |
|||
| $ | artype = '', |
|||
| $ | OBJTypeNS = array() | |||
| ) |
Definition at line 375 of file class.ilBMFBase.php.
References $type, $xml, _getNamespacePrefix(), _getType(), _isSoapValue(), and _multiArrayType().
Referenced by _multiArrayType().
{
$namespaces = array();
$arrayType = $xmlout_value = NULL;
$typePrefix = $elPrefix = $xmlout_offset = $xmlout_arrayType = $xmlout_type = $xmlns = '';
$ptype = $array_type_ns = '';
if (!$name || is_numeric($name))
{
$name = 'item';
}
if ($this->_wsdl)
list($ptype,$arrayType,$array_type_ns) = $this->_wsdl->getSchemaType($type, $name, $typeNamespace);
if (!$arrayType) $arrayType = $artype;
if (!$ptype) $ptype = $this->_getType($value);
if (!$type) $type = $ptype;
if (strcasecmp($ptype,'Struct')==0 || strcasecmp($type,'Struct')==0)
{
// struct
$vars = NULL;
if (is_object($value))
{
$vars = get_object_vars($value);
}
else
{
$vars = &$value;
}
if (is_array($vars))
{
foreach (array_keys($vars) as $k)
{
if ($k[0]=='_')
continue; // hide private vars
if (is_object($vars[$k]))
{
if (is_a($vars[$k],'ilbmfvalue'))
{
$xmlout_value .= $vars[$k]->serialize($this);
}
else
{
// XXX get the members and serialize them instead
// converting to an array is more overhead than we
// should realy do, but php-soap is on it's way.
$objarr = get_object_vars ( $vars[$k] );
if (!isset ($objarr['OBJTypeNS']) )
{
$xmlout_value .= $this->_serializeValue(get_object_vars($vars[$k]), $k, false, $this->_section5?NULL:$elNamespace, NULL, NULL, NULL, NULL);
}
else
{
$xmlout_value .= $this->_serializeValue(get_object_vars($vars[$k]), $k, false, $this->_section5?NULL:$elNamespace, NULL, NULL, NULL, NULL, $objarr['OBJTypeNS']);
}
}
}
else
{
if ( $k != 'OBJTypeNS' )
{
$xmlout_value .= $this->_serializeValue($vars[$k],$k, false, $this->_section5?NULL:$elNamespace);
}
}
}
}
}
else
{
if (strcasecmp($ptype,'Array')==0 || strcasecmp($type,'Array')==0)
{
// array
$typeNamespace = SOAP_SCHEMA_ENCODING;
$orig_type = $type;
$type = 'Array';
$numtypes = 0;
// XXX this will be slow on larger array's. Basicly, it flattens array's to allow us
// to serialize multi-dimensional array's. We only do this if arrayType is set,
// which will typicaly only happen if we are using WSDL
if (isset($options['flatten']) || ($arrayType && (strchr($arrayType,',') || strstr($arrayType,']['))))
{
$numtypes = $this->_multiArrayType($value, $arrayType, $ar_size, $xmlout_value);
}
$array_type = $array_type_prefix = '';
if ($numtypes != 1)
{
$arrayTypeQName = new QName($arrayType);
$arrayType = $arrayTypeQName->name;
$array_types = array();
$array_val = NULL;
// serialize each array element
$ar_size = count($value);
for ($i=0; $i < $ar_size; $i++)
{
$array_val =& $value[$i];
if ($this->_isSoapValue($array_val))
{
$array_type = $array_val->type;
$array_types[$array_type] = 1;
$array_type_ns = $array_val->type_namespace;
$xmlout_value .= $array_val->serialize($this);
}
else
{
$array_type = $this->_getType($array_val);
$array_types[$array_type] = 1;
$objarr = get_object_vars ( $array_val );
if (isset ($objarr['OBJTypeNS']) )
{
$tmp_arr['item'] = $objarr['OBJTypeNS']['item'];
$xmlout_value .= $this->_serializeValue($array_val,'item', $array_type, $this->_section5?NULL:$elNamespace, NULL, NULL, NULL, NULL, $tmp_arr );
}
else
{
$xmlout_value .= $this->_serializeValue($array_val,'item', $array_type, $this->_section5?NULL:$elNamespace);
}
}
}
$xmlout_offset = " SOAP-ENC:offset=\"[0]\"";
if (!$arrayType)
{
$numtypes = count($array_types);
if ($numtypes == 1)
$arrayType = $array_type;
// using anyType is more interoperable
if ($array_type == 'Struct')
{
$array_type = '';
}
else
if ($array_type == 'Array')
{
$arrayType = 'anyType';
$array_type_prefix = 'xsd';
}
else
if (!$arrayType)
$arrayType = $array_type;
}
}
if (!isset($arrayType) || $numtypes > 1)
{
$arrayType = 'xsd:anyType'; // should reference what schema we're using
}
else
{
if ($array_type_ns)
{
$array_type_prefix = $this->_getNamespacePrefix($array_type_ns);
}
else
if (array_key_exists($arrayType, $this->_typemap[$this->_XMLSchemaVersion]))
{
$array_type_prefix = $this->_namespaces[$this->_XMLSchemaVersion];
}
if ($array_type_prefix)
$arrayType = $array_type_prefix.':'.$arrayType;
}
if ( isset ($value[0]->OBJTypeNS) )
{
$xmlout_arrayType = ' xmlns:' . $value[0]->OBJTypeNS['nsPrefix'] . '="' . $value[0]->OBJTypeNS['namespace'] . '" xsi:type="' . $value[0]->OBJTypeNS['nsPrefix'] . ':Array" ' . $value[0]->OBJTypeNS['nsPrefix'] . ':arrayType="' . $value[0]->OBJTypeNS['pnsPrefix'] . ':' . get_class($value[0]) . '[' . count($value) . ']"';
$xmlout_type = $xmlns = $xmlout_offset = $xml_attr = $arrayType = '';
}
else
{
$xmlout_arrayType = " SOAP-ENC:arrayType=\"".$arrayType."[$ar_size]\"";
}
}
else
{
if ($this->_isSoapValue($value))
{
$xmlout_value = $value->serialize($this);
}
else
{
if ($type == 'string')
{
$xmlout_value = htmlspecialchars($value);
}
else
{
if ($type == 'boolean')
{
$xmlout_value = $value?'true':'false';
}
else
{
$xmlout_value = $value;
}
}
}
}
}
// add namespaces
if ($elNamespace)
{
$elPrefix = $this->_getNamespacePrefix($elNamespace);
$xmlout_name = "$elPrefix:$name";
$xmlns = " xmlns:$elPrefix=\"$elNamespace\"";
}
else
{
$xmlout_name = $name;
}
if ($typeNamespace)
{
$typePrefix = $this->_getNamespacePrefix($typeNamespace);
$xmlout_type = "$typePrefix:$type";
}
else
if ($type && array_key_exists($type, $this->_typemap[$this->_XMLSchemaVersion]))
{
$typePrefix = $this->_namespaces[$this->_XMLSchemaVersion];
$xmlout_type = "$typePrefix:$type";
}
// handle additional attributes
$xml_attr = '';
if (count($attributes) > 0)
{
foreach ($attributes as $k => $v)
{
$kqn = new QName($k);
$vqn = new QName($v);
$xml_attr .= ' '.$kqn->fqn().'="'.$vqn->fqn().'"';
}
}
// store the attachement for mime encoding
if (isset($options['attachment']))
$this->__attachments[] = $options['attachment'];
if ($this->_section5)
{
if ($name == 'item' && isset($OBJTypeNS['item']))
{
$xmlout_type = $OBJTypeNS['item'];
}
if ($xmlout_type)
$xmlout_type = " xsi:type=\"$xmlout_type\"";
if (is_null($xmlout_value))
{
$xml = "\r\n<$xmlout_name$xmlout_type$xmlns$xmlout_arrayType$xml_attr/>";
}
else
{
if ( isset ($value[0]->OBJTypeNS) )
{
$xmlout_type = '';
}
$xml = "\r\n<$xmlout_name$xmlout_type$xmlns$xmlout_arrayType$xmlout_offset$xml_attr ";
if ( isset($OBJTypeNS['namespace']) && isset ($OBJTypeNS['type']) )
{
if ( trim($OBJTypeNS['namespace']) != '' || trim($OBJTypeNS['type']) != '' )
{
if ( isset($OBJTypeNS['namespace']) && $OBJTypeNS['namespace'] != '')
{
$xml .= ' xmlns:';
if ( isset($OBJTypeNS['nsPrefix']))
$xml .= $OBJTypeNS['nsPrefix'];
else
$xml .= 'intf';
$xml .= '="' . $OBJTypeNS['namespace'] . '"';
}
if (isset ($OBJTypeNS['type'] ) && $OBJTypeNS['type'] != '')
{
$xml .= ' xsi:type="';
if ( strpos($OBJTypeNS['type'], "xsd:") === false )
{
if ( isset($OBJTypeNS['nsPrefix']))
$xml .= $OBJTypeNS['nsPrefix'] . ':';
else
$xml .= 'intf:';
}
$xml .= $OBJTypeNS['type'] . '"';
}
}
}
$xml .= ">" . $xmlout_value . "</$xmlout_name>";
}
}
else
{
if (is_null($xmlout_value))
{
$xml = "\r\n<$xmlout_name$xmlns$xml_attr/>";
}
else
{
$xml = "\r\n<$xmlout_name$xmlns$xml_attr>" . $xmlout_value . "</$xmlout_name>";
}
}
return $xml;
}
Here is the call graph for this function:
Here is the caller graph for this function:| ilBMFBase::_setSchemaVersion | ( | $ | schemaVersion | ) |
_setSchemaVersion
sets the schema version used in the soap message
| string | (see globals.php) |
private
Definition at line 280 of file class.ilBMFBase.php.
References _raiseSoapFault().
Referenced by ilBMFClient::__generate(), ilBMFParser::ilBMFParser(), and ilBMFParser::startElement().
{
if (!in_array($schemaVersion, $this->_XMLSchema)) {
return $this->_raiseSoapFault("unsuported XMLSchema $schemaVersion");
}
$this->_XMLSchemaVersion = $schemaVersion;
$tmpNS = array_flip($this->_namespaces);
$tmpNS['xsd'] = $this->_XMLSchemaVersion;
$tmpNS['xsi'] = $this->_XMLSchemaVersion.'-instance';
$this->_namespaces = array_flip($tmpNS);
}
Here is the call graph for this function:
Here is the caller graph for this function:| & ilBMFBase::_un_htmlentities | ( | $ | string | ) |
Definition at line 843 of file class.ilBMFBase.php.
{
$trans_tbl = get_html_translation_table (HTML_ENTITIES);
$trans_tbl = array_flip($trans_tbl);
return strtr($string, $trans_tbl);
}
| ilBMFBase::ilBMFBase | ( | $ | faultcode = 'Client' |
) |
Constructor.
| string | error code |
Definition at line 254 of file class.ilBMFBase.php.
References $GLOBALS, and _resetNamespaces().
Referenced by ilBMFClient::ilBMFClient(), ilBMFParser::ilBMFParser(), ilBMFTransport::ilBMFTransport(), ilBMFTransport_HTTP::ilBMFTransport_HTTP(), ilBMFTransport_SMTP::ilBMFTransport_SMTP(), ilBMFWSDL::ilBMFWSDL(), ilBMFWSDL_Cache::ilBMFWSDL_Cache(), and ilBMFWSDL_Parser::ilBMFWSDL_Parser().
{
$this->_myfaultcode = $faultcode;
$this->_resetNamespaces();
$this->_debug_flag = $GLOBALS['SOAP_DEBUG'];
parent::PEAR('SOAPfault');
}
Here is the call graph for this function:
Here is the caller graph for this function:| ilBMFBase::$__attachments = array() |
Definition at line 201 of file class.ilBMFBase.php.
| ilBMFBase::$_auto_translation = false |
Definition at line 244 of file class.ilBMFBase.php.
| ilBMFBase::$_debug_data = '' |
Definition at line 218 of file class.ilBMFBase.php.
| ilBMFBase::$_debug_flag = false |
Definition at line 209 of file class.ilBMFBase.php.
| ilBMFBase::$_doconversion = FALSE |
Definition at line 199 of file class.ilBMFBase.php.
| ilBMFBase::$_encodings = array('ISO-8859-1','US-ASCII','UTF-8') |
Definition at line 195 of file class.ilBMFBase.php.
| ilBMFBase::$_myfaultcode = '' |
Definition at line 225 of file class.ilBMFBase.php.
| ilBMFBase::$_namespaces |
Definition at line 192 of file class.ilBMFBase.php.
| ilBMFBase::$_ns_count = 0 |
Definition at line 193 of file class.ilBMFBase.php.
| ilBMFBase::$_section5 = TRUE |
Definition at line 241 of file class.ilBMFBase.php.
| ilBMFBase::$_type_translation = array() |
Definition at line 245 of file class.ilBMFBase.php.
| ilBMFBase::$_typemap |
Definition at line 127 of file class.ilBMFBase.php.
| ilBMFBase::$_wsdl = NULL |
Definition at line 234 of file class.ilBMFBase.php.
| ilBMFBase::$_xmlEntities = array ( '&' => '&', '<' => '<', '>' => '>', "'" => ''', '"' => '"' ) |
Definition at line 197 of file class.ilBMFBase.php.
| ilBMFBase::$_XMLSchema = array('http://www.w3.org/2001/XMLSchema', 'http://www.w3.org/1999/XMLSchema') |
Definition at line 123 of file class.ilBMFBase.php.
| ilBMFBase::$_XMLSchemaVersion = 'http://www.w3.org/2001/XMLSchema' |
Definition at line 124 of file class.ilBMFBase.php.
| ilBMFBase::$fault = NULL |
Definition at line 232 of file class.ilBMFBase.php.
1.7.1