function detect_xml($r, &$out) { global $__Auth_Yadis_xml_extensions; $out .= $r->h2('XML Support'); // Try to get an XML extension. $ext = Auth_Yadis_getXMLParser(); if ($ext !== null) { $out .= $r->p('XML parsing support is present using the ' . $r->b(get_class($ext)) . ' interface.'); return true; } else { $out .= $r->p('XML parsing support is absent; please install one ' . 'of the following PHP extensions:'); foreach ($__Auth_Yadis_xml_extensions as $name => $cls) { $out .= "<li>" . $r->b($name) . "</li>"; } return false; } }
function _checkForm($html, $message_, $action_url, $form_tag_attrs, $submit_text) { $parser =& Auth_Yadis_getXMLParser(); // Parse HTML source $this->assertTrue($parser->init($html, array())); // Get root element $form = $parser->evalXPath('/form[1]'); $this->assertTrue(count($form) == 1); $form = $form[0]; // Check required form attributes $form_attrs = $parser->attributes($form); foreach ($this->required_form_attrs as $k => $v) { $this->assertTrue($form_attrs[$k] == $v); } // Check extra form attributes foreach ($form_tag_attrs as $k => $v) { // Skip attributes that already passed the required // attribute check, since they should be ignored by the // form generation code. if (in_array($k, array_keys($this->required_form_attrs))) { continue; } $this->assertTrue($form_attrs[$k] == $v, "Form attr {$k} is " . $form_attrs[$k] . " (expected {$v})"); } // Check hidden fields against post args $hiddens = array(); $input_elements = $parser->evalXPath('input', $form); foreach ($input_elements as $e) { $attrs = $parser->attributes($e); if (strtoupper($attrs['type']) == 'HIDDEN') { $hiddens[] = $e; } } // For each post arg, make sure there is a hidden with that // value. Make sure there are no other hiddens. $postargs = $message_->toPostArgs(); foreach ($postargs as $name => $value) { $found = false; foreach ($hiddens as $e) { $attrs = $parser->attributes($e); if ($attrs['name'] == $name) { $this->assertTrue($attrs['value'] == $value); $found = true; break; } } if (!$found) { $this->fail("Post arg {$name} not found in form"); } } $keys = array_keys($postargs); foreach ($hiddens as $e) { $attrs = $parser->attributes($e); $this->assertTrue(in_array($attrs['name'], $keys)); } // Check action URL $this->assertTrue($form_attrs['action'] == $action_url); // Check submit text $submits = array(); foreach ($input_elements as $e) { $attrs = $parser->attributes($e); if (strtoupper($attrs['type']) == 'SUBMIT') { $submits[] = $e; } } $this->assertTrue(count($submits) == 1); $attrs = $parser->attributes($submits[0]); $this->assertTrue($attrs['value'] == $submit_text); }
/** * Parse an XML string (XRDS document) and return either a * Auth_Yadis_XRDS object or null, depending on whether the * XRDS XML is valid. * * @param string $xml_string An XRDS XML string. * @return mixed $xrds An instance of Auth_Yadis_XRDS or null, * depending on the validity of $xml_string */ function &parseXRDS($xml_string, $extra_ns_map = null) { $_null = null; if (!$xml_string) { return $_null; } $parser = Auth_Yadis_getXMLParser(); $ns_map = Auth_Yadis_getNSMap(); if ($extra_ns_map && is_array($extra_ns_map)) { $ns_map = array_merge($ns_map, $extra_ns_map); } if (!($parser && $parser->init($xml_string, $ns_map))) { return $_null; } // Try to get root element. $root = $parser->evalXPath('/xrds:XRDS[1]'); if (!$root) { return $_null; } if (is_array($root)) { $root = $root[0]; } $attrs = $parser->attributes($root); if (array_key_exists('xmlns:xrd', $attrs) && $attrs['xmlns:xrd'] != Auth_Yadis_XMLNS_XRDS) { return $_null; } else { if (array_key_exists('xmlns', $attrs) && preg_match('/xri/', $attrs['xmlns']) && $attrs['xmlns'] != Auth_Yadis_XMLNS_XRD_2_0) { return $_null; } } // Get the last XRD node. $xrd_nodes = $parser->evalXPath('/xrds:XRDS[1]/xrd:XRD'); if (!$xrd_nodes) { return $_null; } $xrds = new Auth_Yadis_XRDS($parser, $xrd_nodes); return $xrds; }