Ejemplo n.º 1
0
 /**
  * Fixes the XML based on the parameters specified in the constructor.
  * @param string $request the raw request produced by the SOAP client
  * @param array $arguments the arguments passed to the SOAP method
  * @param array $headers the headers used in the request
  * @return string the prepared request ready to be sent to the server
  */
 public function FixXml($request, array $arguments, array $headers)
 {
     $requestDom = XmlUtils::GetDomFromXml($request);
     $xpath = new \DOMXPath($requestDom);
     // Fix headers.
     $headersDomNodes = $xpath->query("//*[local-name()='Envelope']/*[local-name()='Header']/*");
     $this->FixXmlNodes($headersDomNodes, $headers, $xpath);
     // Fix body.
     $argumentsDomNodes = $xpath->query("//*[local-name()='Envelope']/*[local-name()='Body']/*");
     $this->FixXmlNodes($argumentsDomNodes, $arguments, $xpath);
     // Remove empty headers.
     if ($this->removeEmptyElements) {
         $this->RemoveEmptyHeaderElements($xpath);
     }
     // Remove id attributes.
     if ($this->replaceReferences) {
         $this->RemoveIdAttributes($xpath);
     }
     return $requestDom->saveXML();
 }
Ejemplo n.º 2
0
 /**
  * Generates the parameters to use for the download request.
  * @param mixed $reportDefinition the report definition, as an ID or object
  * @return array the parameters
  */
 private static function GetParams($reportDefinition)
 {
     $params = array();
     if (is_numeric($reportDefinition)) {
         $params['__rd'] = $reportDefinition;
     } else {
         if (is_object($reportDefinition) || is_array($reportDefinition)) {
             $document = XmlUtils::ConvertObjectToDocument($reportDefinition, 'reportDefinition');
             $document->formatOutput = true;
             $params['__rdxml'] = XmlUtils::GetXmlFromDom($document);
         } else {
             throw new ReportDownloadException('Invalid report definition type: ' . $reportDefinition);
         }
     }
     return $params;
 }
Ejemplo n.º 3
0
 /**
  * A typemap conversion function for parsing long values in SOAP responses.
  * @param string $xml the XML snippet containing the long value.
  * @return mixed the inner long value as an integer, float, or string
  */
 public static function TypemapLongFromXml($xml)
 {
     $document = XmlUtils::GetDomFromXml($xml);
     $tag = $document->documentElement->localName;
     $value = $document->documentElement->nodeValue;
     $isIdField = preg_match('/^id$|Id$|ID$/', $tag);
     if (!$isIdField) {
         if (strcmp(strval(intval($value)), $value) === 0) {
             return intval($value);
         } elseif (strcmp(sprintf('%.0f', floatval($value)), $value) === 0) {
             return floatval($value);
         }
     }
     return $value;
 }