private function parse() { $headerBodyParts = explode("\n", $this->getConfiguration()->getRawOutput(), 2); $header = trim($headerBodyParts[0]); $body = trim($headerBodyParts[1]); if (ExceptionOutputParser::is($body)) { $exceptionOutputParser = new ExceptionOutputParser(); $exceptionOutputParser->setRawOutput($body); $this->output->setException($exceptionOutputParser->getOutput()); return; } if ($this->isIncorrectUsageOutput($header)) { $this->output->setIsIncorrectUsageOutput(true); return; } $this->rawHeader = $header; $this->rawBody = $body; $optionsParser = new OptionsParser(); $optionsParser->setOptionsOutput($header); $messageParser = new MessageParser(); $this->output->setOptions($optionsParser->getOptions()); $bodyDom = new \DOMDocument(); $bodyDom->loadXML($this->extractXmlContentFromBody($body)); $container = $bodyDom->getElementsByTagName('observationresponse')->item(0); if ($this->isPassedNoMessagesOutput($container)) { return; } $this->output->setSourceUrl($container->getAttribute('ref')); $this->output->setDateTime(new \DateTime($container->getAttribute('date'))); $messageElements = $container->getElementsByTagName('message'); foreach ($messageElements as $messageElement) { /* @var $messageElement \DomElement */ $messageParser->setMessageElement($messageElement); /* @var $message \webignition\CssValidatorOutput\Message\Message */ $message = $messageParser->getMessage(); if ($this->getConfiguration()->getReportVendorExtensionIssuesAsWarnings() && $message->isError() && $this->isVendorExtensionMessage($message)) { $message = \webignition\CssValidatorOutput\Message\Warning::fromError($message); } if ($message->isWarning() && $this->getConfiguration()->getIgnoreWarnings() === true) { continue; } if ($this->hasRefDomainToIgnore($message)) { continue; } if ($this->getConfiguration()->getIgnoreVendorExtensionIssues() === true && $this->isVendorExtensionMessage($message)) { continue; } if ($this->getConfiguration()->getIgnoreFalseImageDataUrlMessages() && $this->isFalseImageDataUrlMessage($message)) { continue; } $this->output->addMessage($message); } }
/** * * @return \webignition\CssValidatorOutput\CssValidatorOutput * @throws \InvalidArgumentException */ public function validate() { if (!$this->hasConfiguration()) { throw new \InvalidArgumentException('Unable to validate; configuration not set', self::INVALID_ARGUMENT_EXCEPTION_CONFIGURATION_NOT_SET); } try { $this->getLocalProxyResource()->prepare(); } catch (\webignition\WebResource\Exception\InvalidContentTypeException $invalidContentTypeException) { $cssValidatorOutput = new CssValidatorOutput(); $cssValidatorOutputException = new ExceptionOutput(); $cssValidatorOutputException->setType(new ExceptionOutputType('invalid-content-type:' . $invalidContentTypeException->getResponseContentType()->getTypeSubtypeString())); $cssValidatorOutput->setException($cssValidatorOutputException); return $cssValidatorOutput; } catch (\webignition\WebResource\Exception\Exception $webResourceException) { $cssValidatorOutput = new CssValidatorOutput(); $cssValidatorOutputException = new ExceptionOutput(); $cssValidatorOutputException->setType(new ExceptionOutputType('http' . $webResourceException->getResponse()->getStatusCode())); $cssValidatorOutput->setException($cssValidatorOutputException); return $cssValidatorOutput; } catch (ConnectException $connectException) { $curlExceptionFactory = new CurlExceptionFactory(); if ($curlExceptionFactory->isCurlException($connectException)) { $curlException = $curlExceptionFactory->fromConnectException($connectException); $cssValidatorOutput = new CssValidatorOutput(); $cssValidatorOutputException = new ExceptionOutput(); $cssValidatorOutputException->setType(new ExceptionOutputType('curl' . $curlException->getCurlCode())); $cssValidatorOutput->setException($cssValidatorOutputException); return $cssValidatorOutput; } } $cssValidatorOutputParserConfiguration = new CssValidatorOutputParserConfiguration(); $validatorOutput = $this->replaceLocalFilePathsWithOriginalFilePaths(implode("\n", $this->getRawValidatorOutputLines())); $cssValidatorOutputParserConfiguration->setRawOutput($validatorOutput); $this->localProxyResource->clear(); if ($this->getConfiguration()->hasFlag(Flags::FLAG_IGNORE_FALSE_IMAGE_DATA_URL_MESSAGES)) { $cssValidatorOutputParserConfiguration->setIgnoreFalseImageDataUrlMessages(true); } if ($this->getConfiguration()->hasFlag(Flags::FLAG_IGNORE_WARNINGS)) { $cssValidatorOutputParserConfiguration->setIgnoreWarnings(true); } if ($this->getConfiguration()->getVendorExtensionSeverityLevel() === VendorExtensionSeverityLevel::LEVEL_IGNORE) { $cssValidatorOutputParserConfiguration->setIgnoreVendorExtensionIssues(true); } if ($this->getConfiguration()->getVendorExtensionSeverityLevel() === VendorExtensionSeverityLevel::LEVEL_WARN) { $cssValidatorOutputParserConfiguration->setReportVendorExtensionIssuesAsWarnings(true); } if ($this->getConfiguration()->hasDomainsToIgnore()) { $cssValidatorOutputParserConfiguration->setRefDomainsToIgnore($this->getConfiguration()->getDomainsToIgnore()); } $cssValidatorOutputParser = new CssValidatorOutputParser(); $cssValidatorOutputParser->setConfiguration($cssValidatorOutputParserConfiguration); $output = $cssValidatorOutputParser->getOutput(); if ($this->getLocalProxyResource()->hasWebResourceExceptions()) { foreach ($this->getLocalProxyResource()->getWebResourceExceptions() as $webResourceException) { $error = new \webignition\CssValidatorOutput\Message\Error(); $error->setContext(''); $error->setLineNumber(0); if ($webResourceException instanceof \webignition\WebResource\Exception\InvalidContentTypeException) { $error->setMessage('invalid-content-type:' . (string) $webResourceException->getResponseContentType()); } else { $error->setMessage('http-error:' . $webResourceException->getResponse()->getStatusCode()); } $error->setRef($webResourceException->getRequest()->getUrl()); $output->addMessage($error); } } if ($this->getLocalProxyResource()->hasCurlExceptions()) { foreach ($this->getLocalProxyResource()->getCurlExceptions() as $curlExceptionDetails) { $error = new \webignition\CssValidatorOutput\Message\Error(); $error->setContext(''); $error->setLineNumber(0); $error->setMessage('curl-error:' . $curlExceptionDetails['exception']->getCurlCode()); $error->setRef($curlExceptionDetails['url']); $output->addMessage($error); } } return $cssValidatorOutputParser->getOutput(); }