From becce6b7520912257c3d72697a3aefec9923a467 Mon Sep 17 00:00:00 2001 From: Sean Molenaar Date: Thu, 29 Nov 2018 20:59:46 +0100 Subject: Define an official codestyle and adhere to it. --- lib/Fetcher/FeedFetcher.php | 190 ++++++++++++++++++++++++-------------------- 1 file changed, 104 insertions(+), 86 deletions(-) (limited to 'lib/Fetcher/FeedFetcher.php') diff --git a/lib/Fetcher/FeedFetcher.php b/lib/Fetcher/FeedFetcher.php index 9a2e67445..65a4b5526 100644 --- a/lib/Fetcher/FeedFetcher.php +++ b/lib/Fetcher/FeedFetcher.php @@ -47,7 +47,8 @@ class FeedFetcher implements IFeedFetcher private $time; private $clientService; - public function __construct(Reader $reader, + public function __construct( + Reader $reader, PicoFeedFaviconFactory $faviconFactory, IL10N $l10n, Time $time, @@ -64,7 +65,7 @@ class FeedFetcher implements IFeedFetcher /** * This fetcher handles all the remaining urls therefore always returns true */ - public function canHandle($url) + public function canHandle($url) { return true; } @@ -73,35 +74,35 @@ class FeedFetcher implements IFeedFetcher /** * Fetch a feed from remote * - * @param string $url remote url of the feed - * @param boolean $getFavicon if the favicon should also be fetched, - * defaults to true - * @param string $lastModified a last modified value from an http header - * defaults to false. If lastModified - * matches the http header from the feed no - * results are fetched - * @param string $etag an etag from an http header. - * If lastModified matches the - * http header from the feed no - * results are fetched - * @param bool fullTextEnabled if true tells the fetcher to enhance the - * articles by fetching custom enhanced content - * @param string $basicAuthUser if given, basic auth is set for this feed - * @param string $basicAuthPassword if given, basic auth is set for this - * feed. Ignored if user is null or an - * empty string + * @param string $url remote url of the feed + * @param boolean $getFavicon if the favicon should also be fetched, defaults to true + * @param string $lastModified a last modified value from an http header defaults to false. + * If lastModified matches the http header from the feed no results are fetched + * @param string $etag an etag from an http header. + * If lastModified matches the http header from the feed no results are fetched + * @param bool $fullTextEnabled if true tells the fetcher to enhance the articles by fetching more content + * @param string $basicAuthUser if given, basic auth is set for this feed + * @param string $basicAuthPassword if given, basic auth is set for this feed. Ignored if user is empty + * * @throws FetcherException if it fails * @return array an array containing the new feed and its items, first * element being the Feed and second element being an array of Items */ - public function fetch($url, $getFavicon = true, $lastModified = null, - $etag = null, $fullTextEnabled = false, - $basicAuthUser = null, $basicAuthPassword = null + public function fetch( + $url, + $getFavicon = true, + $lastModified = null, + $etag = null, + $fullTextEnabled = false, + $basicAuthUser = null, + $basicAuthPassword = null ) { try { if ($basicAuthUser !== null && trim($basicAuthUser) !== '') { $resource = $this->reader->discover( - $url, $lastModified, $etag, + $url, + $lastModified, + $etag, $basicAuthUser, $basicAuthPassword ); @@ -123,13 +124,24 @@ class FeedFetcher implements IFeedFetcher if ($fullTextEnabled) { $parser->enableContentGrabber(); - $parser->getItemPostProcessor()->register(new LWNProcessor($basicAuthUser, $basicAuthPassword, $this->clientService)); + $parser->getItemPostProcessor()->register( + new LWNProcessor( + $basicAuthUser, + $basicAuthPassword, + $this->clientService + ) + ); } $parsedFeed = $parser->execute(); $feed = $this->buildFeed( - $parsedFeed, $url, $getFavicon, $lastModified, $etag, $location + $parsedFeed, + $url, + $getFavicon, + $lastModified, + $etag, + $location ); $items = []; @@ -138,114 +150,115 @@ class FeedFetcher implements IFeedFetcher } return [$feed, $items]; - } catch (Exception $ex) { $this->handleError($ex, $url); } - } - private function handleError(Exception $ex, $url) + private function handleError(Exception $ex, $url) { $msg = $ex->getMessage(); if ($ex instanceof MalFormedXmlException) { $msg = $this->l10n->t('Feed contains invalid XML'); - } else if ($ex instanceof SubscriptionNotFoundException) { + } elseif ($ex instanceof SubscriptionNotFoundException) { $msg = $this->l10n->t( 'Feed not found: Either the website ' . 'does not provide a feed or blocks access. To rule out ' . 'blocking, try to download the feed on your server\'s ' . 'command line using curl: curl ' . $url ); - } else if ($ex instanceof UnsupportedFeedFormatException) { + } elseif ($ex instanceof UnsupportedFeedFormatException) { $msg = $this->l10n->t('Detected feed format is not supported'); - } else if ($ex instanceof InvalidCertificateException) { + } elseif ($ex instanceof InvalidCertificateException) { $msg = $this->buildCurlSslErrorMessage($ex->getCode()); - } else if ($ex instanceof InvalidUrlException) { + } elseif ($ex instanceof InvalidUrlException) { $msg = $this->l10n->t('Website not found'); - } else if ($ex instanceof MaxRedirectException) { + } elseif ($ex instanceof MaxRedirectException) { $msg = $this->l10n->t('More redirects than allowed, aborting'); - } else if ($ex instanceof MaxSizeException) { + } elseif ($ex instanceof MaxSizeException) { $msg = $this->l10n->t('Bigger than maximum allowed size'); - } else if ($ex instanceof TimeoutException) { + } elseif ($ex instanceof TimeoutException) { $msg = $this->l10n->t('Request timed out'); - } else if ($ex instanceof UnauthorizedException) { + } elseif ($ex instanceof UnauthorizedException) { $msg = $this->l10n->t( 'Required credentials for feed were ' . 'either missing or incorrect' ); - } else if ($ex instanceof ForbiddenException) { + } elseif ($ex instanceof ForbiddenException) { $msg = $this->l10n->t('Forbidden to access feed'); } throw new FetcherException($msg); } - private function buildCurlSslErrorMessage($errorCode) + private function buildCurlSslErrorMessage($errorCode) { switch ($errorCode) { - case 35: // CURLE_SSL_CONNECT_ERROR - return $this->l10n->t( - 'Certificate error: A problem occurred ' . + case 35: // CURLE_SSL_CONNECT_ERROR + return $this->l10n->t( + 'Certificate error: A problem occurred ' . 'somewhere in the SSL/TLS handshake. Could be ' . 'certificates (file formats, paths, permissions), ' . 'passwords, and others.' - ); - case 51: // CURLE_PEER_FAILED_VERIFICATION - return $this->l10n->t( - 'Certificate error: The remote server\'s SSL ' . + ); + case 51: // CURLE_PEER_FAILED_VERIFICATION + return $this->l10n->t( + 'Certificate error: The remote server\'s SSL ' . 'certificate or SSH md5 fingerprint was deemed not OK.' - ); - case 58: // CURLE_SSL_CERTPROBLEM - return $this->l10n->t( - 'Certificate error: Problem with the local client ' . + ); + case 58: // CURLE_SSL_CERTPROBLEM + return $this->l10n->t( + 'Certificate error: Problem with the local client ' . 'certificate.' - ); - case 59: // CURLE_SSL_CIPHER - return $this->l10n->t( - 'Certificate error: Couldn\'t use specified cipher.' - ); - case 60: // CURLE_SSL_CACERT - return $this->l10n->t( - 'Certificate error: Peer certificate cannot be ' . + ); + case 59: // CURLE_SSL_CIPHER + return $this->l10n->t( + 'Certificate error: Couldn\'t use specified cipher.' + ); + case 60: // CURLE_SSL_CACERT + return $this->l10n->t( + 'Certificate error: Peer certificate cannot be ' . 'authenticated with known CA certificates.' - ); - case 64: // CURLE_USE_SSL_FAILED - return $this->l10n->t( - 'Certificate error: Requested FTP SSL level failed.' - ); - case 66: // CURLE_SSL_ENGINE_INITFAILED - return $this->l10n->t( - 'Certificate error: Initiating the SSL engine failed.' - ); - case 77: // CURLE_SSL_CACERT_BADFILE - return $this->l10n->t( - 'Certificate error: Problem with reading the SSL CA ' . + ); + case 64: // CURLE_USE_SSL_FAILED + return $this->l10n->t( + 'Certificate error: Requested FTP SSL level failed.' + ); + case 66: // CURLE_SSL_ENGINE_INITFAILED + return $this->l10n->t( + 'Certificate error: Initiating the SSL engine failed.' + ); + case 77: // CURLE_SSL_CACERT_BADFILE + return $this->l10n->t( + 'Certificate error: Problem with reading the SSL CA ' . 'cert (path? access rights?)' - ); - case 83: // CURLE_SSL_ISSUER_ERROR - return $this->l10n->t( - 'Certificate error: Issuer check failed' - ); - default: - return $this->l10n->t('Unknown SSL certificate error!'); + ); + case 83: // CURLE_SSL_ISSUER_ERROR + return $this->l10n->t( + 'Certificate error: Issuer check failed' + ); + default: + return $this->l10n->t('Unknown SSL certificate error!'); } } - private function decodeTwice($string) + private function decodeTwice($string) { return html_entity_decode( html_entity_decode( - $string, ENT_QUOTES | ENT_HTML5, 'UTF-8' + $string, + ENT_QUOTES | ENT_HTML5, + 'UTF-8' ), - ENT_QUOTES | ENT_HTML5, 'UTF-8' + ENT_QUOTES | ENT_HTML5, + 'UTF-8' ); } - protected function determineRtl($parsedItem, $parsedFeed) + protected function determineRtl($parsedItem, $parsedFeed) { $itemLang = $parsedItem->getLanguage(); $feedLang = $parsedFeed->getLanguage(); @@ -258,7 +271,7 @@ class FeedFetcher implements IFeedFetcher } - protected function buildItem($parsedItem, $parsedFeed) + protected function buildItem($parsedItem, $parsedFeed) { $item = new Item(); $item->setUnread(true); @@ -276,7 +289,8 @@ class FeedFetcher implements IFeedFetcher // purification is done in the service layer $body = $parsedItem->getContent(); $body = mb_convert_encoding( - $body, 'HTML-ENTITIES', + $body, + 'HTML-ENTITIES', mb_detect_encoding($body) ); $item->setBody($body); @@ -284,7 +298,7 @@ class FeedFetcher implements IFeedFetcher $enclosureUrl = $parsedItem->getEnclosureUrl(); if ($enclosureUrl) { $enclosureType = $parsedItem->getEnclosureType(); - if (stripos($enclosureType, 'audio/') !== false + if (stripos($enclosureType, 'audio/') !== false || stripos($enclosureType, 'video/') !== false ) { $item->setEnclosureMime($enclosureType); @@ -298,8 +312,13 @@ class FeedFetcher implements IFeedFetcher } - protected function buildFeed($parsedFeed, $url, $getFavicon, $modified, - $etag, $location + protected function buildFeed( + $parsedFeed, + $url, + $getFavicon, + $modified, + $etag, + $location ) { $feed = new Feed(); @@ -327,5 +346,4 @@ class FeedFetcher implements IFeedFetcher return $feed; } - } -- cgit v1.2.3