ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
ilBMFBase Class Reference
+ Inheritance diagram for ilBMFBase:
+ Collaboration diagram for ilBMFBase:

Public Member Functions

 ilBMFBase ($faultcode= 'Client')
 Constructor.
 _resetNamespaces ()
 _setSchemaVersion ($schemaVersion)
 Sets the schema version used in the SOAP message.
 _getNamespacePrefix ($ns)
 _getNamespaceForPrefix ($prefix)
 _isSoapValue (&$value)
 _serializeValue (&$value, $name= '', $type=false, $elNamespace=NULL, $typeNamespace=NULL, $options=array(), $attributes=array(), $artype='', $OBJTypeNS=array())
 _getType (&$value)
 Converts a PHP type to a SOAP type.
 _multiArrayType (&$value, &$type, &$size, &$xml)
 _isBase64 (&$value)
 Returns whether a string is base64 encoded data.
 _isBase64Type ($type)
 Returns whether a type is a base64 type.
 _isHash (&$a)
 Returns whether an array is a hash.
 _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)
- Public Member Functions inherited from ilBMFBase_Object
 ilBMFBase_Object ($faultcode= 'Client')
 Constructor.
_raiseSoapFault ($str, $detail= '', $actorURI= '', $code=null, $mode=null, $options=null, $skipmsg=false)
 Raises a SOAP error.
 __isfault ()
__getfault ()
 _debug ($string)
 Adds a string to the debug data.
- Public Member Functions inherited from PEAR
 PEAR ($error_class=null)
 Constructor.
 _PEAR ()
 Destructor (the emulated type of...).
getStaticProperty ($class, $var)
 If you have a class that's mostly/entirely static, and you need static properties, you can use this method to simulate them.
 registerShutdownFunc ($func, $args=array())
 Use this function to register a shutdown method for static classes.
 isError ($data, $code=null)
 Tell whether a value is a PEAR error.
 setErrorHandling ($mode=null, $options=null)
 Sets how errors generated by this object should be handled.
 expectError ($code= '*')
 This method is used to tell which errors you expect to get.
 popExpect ()
 This method pops one element off the expected error codes stack.
 _checkDelExpect ($error_code)
 This method checks unsets an error code if available.
 delExpect ($error_code)
 This method deletes all occurences of the specified element from the expected error codes stack.
raiseError ($message=null, $code=null, $mode=null, $options=null, $userinfo=null, $error_class=null, $skipmsg=false)
 This method is a wrapper that returns an instance of the configured error class with this object's default error handling applied.
throwError ($message=null, $code=null, $userinfo=null)
 Simpler form of raiseError with fewer options.
 staticPushErrorHandling ($mode, $options=null)
 staticPopErrorHandling ()
 pushErrorHandling ($mode, $options=null)
 Push a new error handler on top of the error handler options stack.
 popErrorHandling ()
 Pop the last error handler used.
 loadExtension ($ext)
 OS independant PHP extension load.

Data Fields

 $_XMLSchema
 $_XMLSchemaVersion = 'http://www.w3.org/2001/XMLSchema'
 $_typemap
 $_defaultObjectClassname = 'stdClass'
 Default class name to use for decoded response objects.
 $_namespaces
 $_namespace
 $_xmlEntities
 $_doconversion = false
 $__attachments = array()
 $_wsdl = null
 $_section5 = true
 True if we use section 5 encoding, or false if this is literal.
 $_auto_translation = false
 $_type_translation = array()
- Data Fields inherited from ilBMFBase_Object
 $_debug_flag = false
 Store debugging information in $_debug_data?
 $_debug_data = ''
 String containing debugging information if $_debug_flag is true.
 $_encodings = array('ISO-8859-1', 'US-ASCII', 'UTF-8')
 Supported encodings, limited by XML extension.
 $_myfaultcode = ''
 Fault code.
 $fault = null
 Recent PEAR_Error object.
- Data Fields inherited from PEAR
 $_debug = false
 $_default_error_mode = null
 $_default_error_options = null
 $_default_error_handler = ''
 $_error_class = 'PEAR_Error'
 $_expected_errors = array()

Detailed Description

Definition at line 248 of file class.ilBMFBase.php.

Member Function Documentation

ilBMFBase::__set_type_translation (   $type,
  $class = null 
)

Definition at line 1416 of file class.ilBMFBase.php.

{
$tq =& new QName($type);
if (!$class) {
$class = $tq->name;
}
$this->_type_translation[$type]=$class;
}
& ilBMFBase::_decode ( $soapval)

Definition at line 1085 of file class.ilBMFBase.php.

References $_defaultObjectClassname, $t, and _isSoapValue().

{
global $SOAP_OBJECT_STRUCT;
if (!$this->_isSoapValue($soapval)) {
return $soapval;
} elseif (is_array($soapval->value)) {
if ($SOAP_OBJECT_STRUCT && $soapval->type != 'Array') {
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()];
} elseif (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];
} elseif ($this->_auto_translation) {
if (class_exists($soapval->type)) {
$classname = $soapval->type;
} elseif ($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 child's 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);
} elseif (isset($return->{$item->name}) &&
is_array($return->{$item->name})) {
$return->{$item->name}[] = $this->_decode($item);
} elseif (is_array($return)) {
$return[] =& $this->_decode($item);
} else {
$return->{$item->name} =& $this->_decode($item);
}
} elseif (isset($return->{$item->name})) {
$isstruct = false;
if (count(get_object_vars($return)) == 1) {
$d =& $this->_decode($item);
$return = array($return->{$item->name}, $d);
} else {
$d =& $this->_decode($item);
$return->{$item->name} = array($return->{$item->name}, $d);
}
} 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)) {
if ($this->_isBase64Type($item->type) &&
!$this->_isBase64Type($soapval->arrayType)) {
// Decode the value if we're losing the base64
// type information.
$item->value = base64_decode($item->value);
}
$item->type = $soapval->arrayType;
}
if (!$isstruct) {
$return[] = $this->_decode($item);
} elseif (isset($return[$item->name])) {
$isstruct = false;
$d =& $this->_decode($item);
$return = array($return[$item->name], $d);
} 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;
}
} elseif ($soapval->type &&
isset($this->_typemap[SOAP_XML_SCHEMA_VERSION][$soapval->type])) {
// If we can, set variable type.
settype($soapval->value,
$this->_typemap[SOAP_XML_SCHEMA_VERSION][$soapval->type]);
}
if ($this->_isBase64Type($soapval->type)) {
return base64_decode($soapval->value);
} else {
return $soapval->value;
}
}

+ Here is the call graph for this function:

ilBMFBase::_decodeDIMEMessage ( $data,
$headers,
$attachments 
)

Definition at line 1380 of file class.ilBMFBase.php.

References PEAR\isError(), and SOAP_ENVELOP.

Referenced by ilBMFTransport_HTTP\_parseResponse().

{
global $SOAP_options;
if (!isset($SOAP_options['DIME'])) {
$this->_raiseSoapFault('DIME Unsupported, install PEAR::Net::DIME', '', '', 'Server');
return;
}
// This SHOULD be moved to the transport layer, e.g. PHP itself should
// handle parsing DIME ;)
$dime =& new Net_DIME_Message();
$err = $dime->decodeData($data);
if (PEAR::isError($err)) {
$this->_raiseSoapFault('Failed to decode the DIME message!', '', '', 'Server');
return;
}
if (strcasecmp($dime->parts[0]['type'], SOAP_ENVELOP) != 0) {
$this->_raiseSoapFault('DIME record 1 is not a SOAP envelop!', '', '', 'Server');
return;
}
$data = $dime->parts[0]['data'];
// Fake it for now.
$headers['content-type'] = 'text/xml';
$c = count($dime->parts);
for ($i = 0; $i < $c; $i++) {
$part =& $dime->parts[$i];
// We need to handle URI's better.
$id = strncmp($part['id'], 'cid:', 4)
? 'cid:' . $part['id']
: $part['id'];
$attachments[$id] = $part['data'];
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilBMFBase::_decodeMimeMessage ( $data,
$headers,
$attachments 
)

Definition at line 1330 of file class.ilBMFBase.php.

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;
// 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;
} elseif (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'])) {
// 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, -1);
$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 412 of file class.ilBMFBase.php.

Referenced by ilBMFParser\startElement().

{
$flipped = array_flip($this->_namespaces);
if (isset($flipped[$prefix])) {
return $flipped[$prefix];
}
return null;
}

+ Here is the caller graph for this function:

ilBMFBase::_getNamespacePrefix (   $ns)

Definition at line 399 of file class.ilBMFBase.php.

Referenced by _serializeValue(), and ilBMFParser\startElement().

{
if ($this->_namespace && $ns == $this->_namespace) {
return '';
}
if (isset($this->_namespaces[$ns])) {
return $this->_namespaces[$ns];
}
$prefix = 'ns' . count($this->_namespaces);
$this->_namespaces[$ns] = $prefix;
return $prefix;
}

+ Here is the caller graph for this function:

ilBMFBase::_getType ( $value)

Converts a PHP type to a SOAP type.

private

Parameters
string$valueThe value to inspect.
Returns
string The value's SOAP type.

Definition at line 873 of file class.ilBMFBase.php.

References _isBase64(), _isHash(), _isSoapValue(), and ilBMFType_hexBinary\is_hexbin().

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':
// Hashes are always handled as structs.
if ($this->_isHash($value)) {
$type = 'Struct';
} else {
$ar_size = count($value);
reset($value);
$key1 = key($value);
if ($ar_size > 0 && is_a($key1, 'ilBMFValue')) {
// FIXME: for non-wsdl structs that are all the same type
$key2 = key($value);
if ($ar_size > 1 &&
$this->_isSoapValue($key1) &&
$this->_isSoapValue($key2) &&
$key1->name != $key2->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':
break;
case 'double':
// double is deprecated in PHP 4.2 and later.
$type = 'decimal';
break;
case 'null':
$type = '';
break;
case 'string':
/* Databay: Changes for BMF */
/* 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';
}
}
}
}
}
break;*/
if ($SOAP_RAW_CONVERT) {
if (is_numeric($value)) {
if (strstr($value,'.')) $type = 'float';
else $type = 'int';
} else
$type = 'hexBinary';
} else
if ($this->_isBase64($value)) {
$type = 'base64Binary';
} else {
$dt =& new ilBMFType_dateTime($value);
if ($dt->toUnixtime() != -1) {
$type = 'dateTime';
#$value = $dt->toSOAP();
}
}
} 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)

Returns whether a string is base64 encoded data.

Parameters
string$valueThe string to check.
Returns
boolean True if the specified value seems to be base64 encoded.

Definition at line 1026 of file class.ilBMFBase.php.

Referenced by _getType().

{
$l = strlen($value);
if ($l) {
return $value[$l - 1] == '=' &&
preg_match('/[A-Za-z=\/\+]+/', $value);
}
return false;
}

+ Here is the caller graph for this function:

ilBMFBase::_isBase64Type (   $type)

Returns whether a type is a base64 type.

Parameters
string$typeA type name.
Returns
boolean True if the type name is a base64 type.

Definition at line 1043 of file class.ilBMFBase.php.

{
return $type == 'base64' || $type == 'base64Binary';
}
ilBMFBase::_isHash ( $a)

Returns whether an array is a hash.

Parameters
array$aAn array to check.
Returns
boolean True if the specified array is a hash.

Definition at line 1055 of file class.ilBMFBase.php.

References $t, and _isSoapValue().

Referenced by _getType().

{
// I really dislike having to loop through this in PHP code, really
// 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;
} elseif ($this->_isSoapValue($v)) {
$names[$v->name] = 1;
}
// If someone has a large hash they should really 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 421 of file class.ilBMFBase.php.

Referenced by _decode(), _getType(), _isHash(), and _serializeValue().

{
return is_a($value, 'ilBMFValue');
}

+ Here is the caller graph for this function:

ilBMFBase::_makeDIMEMessage (   $xml)

Definition at line 1302 of file class.ilBMFBase.php.

References SOAP_ENVELOP.

{
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 attachments.
$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;
}
ilBMFBase::_makeEnvelope ( $method,
$headers,
  $encoding = SOAP_DEFAULT_ENCODING,
  $options = array() 
)

Creates the SOAP envelope with the SOAP envelop data.

private

Parameters
@paramarray $headers
string$encoding
array$options
Returns
string

Definition at line 1223 of file class.ilBMFBase.php.

References $options, and SOAP_SCHEMA_ENCODING.

Referenced by 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";
foreach ($this->_namespaces as $k => $v) {
$ns_string .= " xmlns:$v=\"$k\"\r\n";
}
if ($this->_namespace) {
$ns_string .= " xmlns=\"{$this->_namespace}\"\r\n";
}
/* If 'use' == 'literal', we do not put in the encodingStyle. This is
* denoted by $this->_section5 being false. 'use' can be defined at a
* more granular level than we are dealing with here, so this does not
* work for all services. */
$xml = "<?xml 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 1271 of file class.ilBMFBase.php.

{
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();
}
ilBMFBase::_multiArrayType ( $value,
$type,
$size,
$xml 
)

Definition at line 987 of file class.ilBMFBase.php.

References $size, _getType(), and _serializeValue().

Referenced by _serializeValue().

{
$sz = count($value);
if (is_array($value)) {
// 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::_resetNamespaces ( )

Definition at line 370 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 426 of file class.ilBMFBase.php.

References $_XMLSchemaVersion, $options, _getNamespacePrefix(), _getType(), _isSoapValue(), _multiArrayType(), and SOAP_SCHEMA_ENCODING.

Referenced by _multiArrayType().

{
$namespaces = array();
$arrayType = $array_depth = $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, $array_depth)
= $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);
foreach ($value as $array_val) {
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, $elNamespace, NULL, NULL, NULL, NULL, $tmp_arr);
} else {
$xmlout_value .= $this->_serializeValue($array_val,'item', $array_type, $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 (!$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]);
$xmlout_type = $xmlns = $xmlout_offset = $xml_attr = $arrayType = '';
} else {
$xmlout_arrayType = " SOAP-ENC:arrayType=\"" . $arrayType;
}
if ($array_depth != null) {
for ($i = 0; $i < $array_depth; $i++) {
$xmlout_arrayType .= '[]';
}
}
$xmlout_arrayType .= "[$ar_size]\"";
} else if ($this->_isSoapValue($value)) {
$xmlout_value =& $value->serialize($this);
} else if ($type == 'string') {
$xmlout_value = htmlspecialchars($value);
} else if ($type == 'rawstring') {
$xmlout_value =& $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";
} 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 = "";
} else {
if (is_array($value) && 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 = "";
} 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)

Sets the schema version used in the SOAP message.

private

See Also
$_XMLSchema
Parameters
string$schemaVersionThe schema version.

Definition at line 387 of file class.ilBMFBase.php.

References $_XMLSchemaVersion, and ilBMFBase_Object\_raiseSoapFault().

Referenced by 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 1078 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.

See Also
$debug_data, _debug()
Parameters
string$faultcodeError code.

Definition at line 364 of file class.ilBMFBase.php.

References _resetNamespaces(), and ilBMFBase_Object\ilBMFBase_Object().

Referenced by ilBMFParser\ilBMFParser(), ilBMFTransport_HTTP\ilBMFTransport_HTTP(), ilBMFTransport_SMTP\ilBMFTransport_SMTP(), ilBMFWSDL\ilBMFWSDL(), ilBMFWSDL_Cache\ilBMFWSDL_Cache(), ilBMFWSDL_ObjectParser\ilBMFWSDL_ObjectParser(), and ilBMFWSDL_Parser\ilBMFWSDL_Parser().

{
$this->_resetNamespaces();
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Field Documentation

ilBMFBase::$__attachments = array()

Definition at line 342 of file class.ilBMFBase.php.

ilBMFBase::$_auto_translation = false

Definition at line 354 of file class.ilBMFBase.php.

string ilBMFBase::$_defaultObjectClassname = 'stdClass'

Default class name to use for decoded response objects.

Definition at line 328 of file class.ilBMFBase.php.

Referenced by _decode().

ilBMFBase::$_doconversion = false

Definition at line 340 of file class.ilBMFBase.php.

ilBMFBase::$_namespace

Definition at line 332 of file class.ilBMFBase.php.

ilBMFBase::$_namespaces

Definition at line 331 of file class.ilBMFBase.php.

boolean ilBMFBase::$_section5 = true

True if we use section 5 encoding, or false if this is literal.

Definition at line 351 of file class.ilBMFBase.php.

ilBMFBase::$_type_translation = array()

Definition at line 355 of file class.ilBMFBase.php.

ilBMFBase::$_typemap

Definition at line 255 of file class.ilBMFBase.php.

ilBMFBase::$_wsdl = null

Definition at line 344 of file class.ilBMFBase.php.

ilBMFBase::$_xmlEntities
Initial value:
array('&' => '&amp;',
'<' => '&lt;',
'>' => '&gt;',
"'" => '&apos;',
'"' => '&quot;')

Definition at line 334 of file class.ilBMFBase.php.

ilBMFBase::$_XMLSchema
Initial value:
array('http://www.w3.org/2001/XMLSchema',
'http://www.w3.org/1999/XMLSchema')

Definition at line 250 of file class.ilBMFBase.php.

ilBMFBase::$_XMLSchemaVersion = 'http://www.w3.org/2001/XMLSchema'

Definition at line 252 of file class.ilBMFBase.php.

Referenced by _serializeValue(), and _setSchemaVersion().


The documentation for this class was generated from the following file: