public function testAuthenticatedPUT() { $comment1 = $this->objFromFixture('SoapModelAccessTest_Comment', 'comment1'); $comment1ID = $comment1->ID; // test wrong details $c = $this->getTestSoapConnection(); $updateXML = <<<XML <?xml version="1.0" encoding="UTF-8"?> \t\t<SoapModelAccessTest_Comment> \t\t\t<ID>{$comment1ID}</ID> \t\t\t<Name>Jimmy</Name> \t\t</SoapModelAccessTest_Comment>\t\t\t XML; $soapResponse = $c->putXML("SoapModelAccessTest_Comment", $comment1->ID, null, $updateXML, '*****@*****.**', 'wrongpassword'); $this->assertEquals('<error type="authentication" code="401">Unauthorized</error>', $soapResponse); // Check that the details weren't saved $c = $this->getTestSoapConnection(); $soapResponse = $c->getXML("SoapModelAccessTest_Comment", $comment1->ID, null, '*****@*****.**', 'editor'); $responseArr = Convert::xml2array($soapResponse); $this->assertEquals($comment1->ID, $responseArr['ID']); $this->assertEquals('Joe', $responseArr['Name']); // Now do an update with the right password $soapResponse = $c->putXML("SoapModelAccessTest_Comment", $comment1->ID, null, $updateXML, '*****@*****.**', 'editor'); // Check that the details were saved $c = $this->getTestSoapConnection(); $soapResponse = $c->getXML("SoapModelAccessTest_Comment", $comment1->ID, null, '*****@*****.**', 'editor'); $responseArr = Convert::xml2array($soapResponse); $this->assertEquals($comment1->ID, $responseArr['ID']); $this->assertEquals('Jimmy', $responseArr['Name']); }
/** * Create a summary of the content. This will either be the first paragraph, or the first $maxWords * words, whichever is shorter */ public function Summary( $maxWords = 50 ) { // split the string into tags and words $parts = Convert::xml2array( $this->value ); // store any unmatched tags $tagStack = array(); $pIndex = 0; // find the first paragraph tag for( $i = 0; $i < count( $parts ); $i++ ) if( strpos( $parts[$i], '<p' ) === 0 ) { $pIndex = $i; break; } $summary = ''; $words = 0; // create the summary, keeping track of opening and closing tags while( $words <= $maxWords && $pIndex < count( $parts ) ) { if( $parts[$pIndex] == '</p>' ) { $summary .= $parts[$pIndex]; break; } elseif( preg_match( '/<\/(\w+)>/', $parts[$pIndex], $endTag ) && $endTag[1] == substr( $tagStack[count($tagStack) - 1], 1, strlen( $endTag[1] ) ) ) { array_pop( $tagStack ); $words++; $summary .= $parts[$pIndex++]; } elseif( preg_match( '/^<\w+/', $parts[$pIndex] ) ) { array_push( $tagStack, $parts[$pIndex] ); $words++; $summary .= $parts[$pIndex++]; } else $summary .= $parts[$pIndex++] . ' '; } // Tags that shouldn't be closed $noClose = array("br", "img"); // make sure that the summary is well formed XHTML by closing tags while( $openTag = array_pop( $tagStack ) ) { preg_match( '/^<(\w+)\s+/', $openTag, $tagName ); if(sizeof($tagName) > 0) { if(!in_array($tagName[1], $noClose)) { $summary .= "</{$tagName[1]}>"; } } } return $summary; }
/** * Tests {@link Convert::xml2array()} */ public function testXML2Array() { // Ensure an XML file at risk of entity expansion can be avoided safely $inputXML = <<<XML <?xml version="1.0"?> <!DOCTYPE results [<!ENTITY long "SOME_SUPER_LONG_STRING">]> <results> <result>Now include &long; lots of times to expand the in-memory size of this XML structure</result> <result>&long;&long;&long;</result> </results> XML; try { Convert::xml2array($inputXML, true); } catch (Exception $ex) { } $this->assertTrue(isset($ex) && $ex instanceof InvalidArgumentException && $ex->getMessage() === 'XML Doctype parsing disabled'); // Test without doctype validation $expected = array('result' => array("Now include SOME_SUPER_LONG_STRING lots of times to expand the in-memory size of this XML structure", array('long' => array(array('long' => 'SOME_SUPER_LONG_STRING'), array('long' => 'SOME_SUPER_LONG_STRING'), array('long' => 'SOME_SUPER_LONG_STRING'))))); $result = Convert::xml2array($inputXML, false, true); $this->assertEquals($expected, $result); $result = Convert::xml2array($inputXML, false, false); $this->assertEquals($expected, $result); }
public function convertStringToArray($strData) { return Convert::xml2array($strData); }
public function testApiAccessWithPOST() { $url = "/api/v1/RestfulServerTest_AuthorRating"; $data = array('Rating' => '42', 'WriteProtectedField' => 'haxx0red'); $response = Director::test($url, $data, null, 'POST'); // Assumption: XML is default output $responseArr = Convert::xml2array($response->getBody()); $this->assertEquals($responseArr['Rating'], 42); $this->assertNotEquals($responseArr['WriteProtectedField'], 'haxx0red'); }
/** * Manages the 'return' and 'cancel' replies */ function complete() { $this->extend("EwayPayment_Handler_completion_start"); if (isset($_REQUEST['code']) && ($code = $_REQUEST['code'])) { $params = explode('-', $code); if (count($params) == 2) { $payment = EwayPayment::get()->byID(intval($params[0])); if ($payment && $payment->AuthorisationCode == $params[1]) { if (isset($_REQUEST['AccessPaymentCode'])) { $url = $payment->EwayConfirmationURL($_REQUEST['AccessPaymentCode']); $response = file_get_contents($url); if ($response) { $response = Convert::xml2array($response); if (isset($response['ResponseCode']) && $response['ResponseCode'] == '00') { $payment->Status = 'Success'; } else { $payment->Status = 'Failure'; } } else { $payment->Status = 'Failure'; } $payment->write(); $payment->redirectToOrder(); } } } } }