/lib/PEAR/SOAP/Value.php
https://gitlab.com/LisovyiEvhenii/ismextensions · PHP · 288 lines · 94 code · 28 blank · 166 comment · 7 complexity · 026bce92aa9f922f0d8b410ff0f7ae3b MD5 · raw file
- <?php
- /**
- * This file contains the code for converting values between SOAP and PHP.
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 2.02 of the PHP license,
- * that is bundled with this package in the file LICENSE, and is available at
- * through the world-wide-web at http://www.php.net/license/2_02.txt. If you
- * did not receive a copy of the PHP license and are unable to obtain it
- * through the world-wide-web, please send a note to license@php.net so we can
- * mail you a copy immediately.
- *
- * @category Web Services
- * @package SOAP
- * @author Dietrich Ayala <dietrich@ganx4.com> Original Author
- * @author Shane Caraveo <Shane@Caraveo.com> Port to PEAR and more
- * @author Chuck Hagenbuch <chuck@horde.org> Maintenance
- * @author Jan Schneider <jan@horde.org> Maintenance
- * @copyright 2003-2007 The PHP Group
- * @license http://www.php.net/license/2_02.txt PHP License 2.02
- * @link http://pear.php.net/package/SOAP
- */
- require_once 'SOAP/Base.php';
- /**
- * SOAP::Value
- *
- * This class converts values between PHP and SOAP.
- *
- * Originally based on SOAPx4 by Dietrich Ayala
- * http://dietrich.ganx4.com/soapx4
- *
- * @access public
- * @package SOAP
- * @author Shane Caraveo <shane@php.net> Conversion to PEAR and updates
- * @author Dietrich Ayala <dietrich@ganx4.com> Original Author
- */
- class SOAP_Value
- {
- /**
- * The actual value.
- *
- * @var mixed
- */
- var $value = null;
- /**
- * QName instance representing the value name.
- *
- * @var QName
- */
- var $nqn;
- /**
- * The value name, without namespace information.
- *
- * @var string
- */
- var $name = '';
- /**
- * The namespace of the value name.
- *
- * @var string
- */
- var $namespace = '';
- /**
- * QName instance representing the value type.
- *
- * @var QName
- */
- var $tqn;
- /**
- * The value type, without namespace information.
- *
- * @var string
- */
- var $type = '';
- /**
- * The namespace of the value type.
- *
- * @var string
- */
- var $type_namespace = '';
- /**
- * The type of the array elements, if this value is an array.
- *
- * @var string
- */
- var $arrayType = '';
- /**
- * A hash of additional attributes.
- *
- * @see SOAP_Value()
- * @var array
- */
- var $attributes = array();
- /**
- * List of encoding and serialization options.
- *
- * @see SOAP_Value()
- * @var array
- */
- var $options = array();
- /**
- * Constructor.
- *
- * @param string $name Name of the SOAP value {namespace}name.
- * @param mixed $type SOAP value {namespace}type. Determined
- * automatically if not set.
- * @param mixed $value Value to set.
- * @param array $attributes A has of additional XML attributes to be
- * added to the serialized value.
- * @param array $options A list of encoding and serialization options:
- * - 'attachment': array with information about
- * the attachment
- * - 'soap_encoding': defines encoding for SOAP
- * message part of a MIME encoded SOAP request
- * (default: base64)
- * - 'keep_arrays_flat': use the tag name
- * multiple times for each element when
- * passing in an array in literal mode
- * - 'no_type_prefix': supress adding of the
- * namespace prefix
- */
- function SOAP_Value($name = '', $type = false, $value = null,
- $attributes = array(), $options = array())
- {
- $this->nqn = new QName($name);
- $this->name = $this->nqn->name;
- $this->namespace = $this->nqn->namespace;
- if ($type) {
- $this->tqn = new QName($type);
- $this->type = $this->tqn->name;
- $this->type_namespace = $this->tqn->namespace;
- }
- $this->value = $value;
- $this->attributes = $attributes;
- $this->options = $options;
- }
- /**
- * Serializes this value.
- *
- * @param SOAP_Base $serializer A SOAP_Base instance or subclass to
- * serialize with.
- *
- * @return string XML representation of $this.
- */
- function serialize(&$serializer)
- {
- return $serializer->_serializeValue($this->value,
- $this->nqn,
- $this->tqn,
- $this->options,
- $this->attributes,
- $this->arrayType);
- }
- }
- /**
- * This class converts values between PHP and SOAP. It is a simple wrapper
- * around SOAP_Value, adding support for SOAP actor and mustunderstand
- * parameters.
- *
- * Originally based on SOAPx4 by Dietrich Ayala
- * http://dietrich.ganx4.com/soapx4
- *
- * @access public
- * @package SOAP
- * @author Shane Caraveo <shane@php.net> Conversion to PEAR and updates
- * @author Dietrich Ayala <dietrich@ganx4.com> Original Author
- */
- class SOAP_Header extends SOAP_Value
- {
- /**
- * Constructor
- *
- * @param string $name Name of the SOAP value {namespace}name.
- * @param mixed $type SOAP value {namespace}type. Determined
- * automatically if not set.
- * @param mixed $value Value to set
- * @param integer $mustunderstand Zero or one.
- * @param mixed $attributes Attributes.
- */
- function SOAP_Header($name = '', $type, $value, $mustunderstand = 0,
- $attributes = array())
- {
- if (!is_array($attributes)) {
- $actor = $attributes;
- $attributes = array();
- }
- parent::SOAP_Value($name, $type, $value, $attributes);
- if (isset($actor)) {
- $this->attributes[SOAP_BASE::SOAPENVPrefix().':actor'] = $actor;
- } elseif (!isset($this->attributes[SOAP_BASE::SOAPENVPrefix().':actor'])) {
- $this->attributes[SOAP_BASE::SOAPENVPrefix().':actor'] = 'http://schemas.xmlsoap.org/soap/actor/next';
- }
- $this->attributes[SOAP_BASE::SOAPENVPrefix().':mustUnderstand'] = (int)$mustunderstand;
- }
- }
- /**
- * This class handles MIME attachements per W3C's Note on Soap Attachements at
- * http://www.w3.org/TR/SOAP-attachments
- *
- * @access public
- * @package SOAP
- * @author Shane Caraveo <shane@php.net> Conversion to PEAR and updates
- */
- class SOAP_Attachment extends SOAP_Value
- {
- /**
- * Constructor.
- *
- * @param string $name Name of the SOAP value <value_name>
- * @param string $type The attachment's MIME type.
- * @param string $filename The attachment's file name. Ignored if $file
- * is provide.
- * @param string $file The attachment data.
- * @param array $attributes Attributes.
- */
- function SOAP_Attachment($name = '', $type = 'application/octet-stream',
- $filename, $file = null, $attributes = null)
- {
- parent::SOAP_Value($name, null, null);
- $filedata = $file === null ? $this->_file2str($filename) : $file;
- $filename = basename($filename);
- if (PEAR::isError($filedata)) {
- $this->options['attachment'] = $filedata;
- return;
- }
- $cid = md5(uniqid(time()));
- $this->attributes = $attributes;
- $this->attributes['href'] = 'cid:' . $cid;
- $this->options['attachment'] = array('body' => $filedata,
- 'disposition' => $filename,
- 'content_type' => $type,
- 'encoding' => 'base64',
- 'cid' => $cid);
- }
- /**
- * Returns the contents of the given file name as string.
- *
- * @access private
- *
- * @param string $file_name The file location.
- *
- * @return string The file data or a PEAR_Error.
- */
- function _file2str($file_name)
- {
- if (!is_readable($file_name)) {
- return PEAR::raiseError('File is not readable: ' . $file_name);
- }
- if (function_exists('file_get_contents')) {
- return file_get_contents($file_name);
- }
- if (!$fd = fopen($file_name, 'rb')) {
- return PEAR::raiseError('Could not open ' . $file_name);
- }
- $cont = fread($fd, filesize($file_name));
- fclose($fd);
- return $cont;
- }
- }