Public Member Functions | Data Fields

ilBMFBase Class Reference

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 ( '&' => '&amp;', '<' => '&lt;', '>' => '&gt;', "'" => '&apos;', '"' => '&quot;' )
 $_doconversion = FALSE
 $__attachments = array()
 $_debug_flag = false
 $_debug_data = ''
 $_myfaultcode = ''
 $fault = NULL
 $_wsdl = NULL
 $_section5 = TRUE
 $_auto_translation = false
 $_type_translation = array()

Detailed Description

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


Member Function Documentation

& 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 
)

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

References $type.

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

ilBMFBase::_debug ( string  ) 

maintains a string of debug data

Parameters:
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  ) 
Parameters:
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.

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

Parameters:
string value
Returns:
string type - soap type private

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  ) 
Parameters:
string 
Returns:
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  ) 
Parameters:
mixed 
Returns:
boolean

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.

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

Parameters:
string $payload soap data (in xml)
Returns:
associative array (headers,body) private

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

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 $type, _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

Parameters:
string error message
string detailed error message.
string actor
mixed 
mixed 
mixed 
boolean 
See also:
$debug_flag, $debug_data

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, _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

Parameters:
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.

Parameters:
string error code
See also:
$debug_data, _debug()

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:


Field Documentation

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 ( '&' => '&amp;', '<' => '&lt;', '>' => '&gt;', "'" => '&apos;', '"' => '&quot;' )

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.


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