X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2FWallabag%2FCoreBundle%2FHelper%2FContentProxy.php;fp=src%2FWallabag%2FCoreBundle%2FHelper%2FContentProxy.php;h=656ac6eecb93b4430c2bf413787aaf680646a3c9;hb=b5d7eb148c4cd62ff187b08765f0c13c7d330fcf;hp=ddecd6f4839de3c5e53c9f2638646f1269a0f5d8;hpb=896f981ff522fe7d594e386a7112b23e593d6240;p=github%2Fwallabag%2Fwallabag.git diff --git a/src/Wallabag/CoreBundle/Helper/ContentProxy.php b/src/Wallabag/CoreBundle/Helper/ContentProxy.php index ddecd6f4..656ac6ee 100644 --- a/src/Wallabag/CoreBundle/Helper/ContentProxy.php +++ b/src/Wallabag/CoreBundle/Helper/ContentProxy.php @@ -66,6 +66,76 @@ class ContentProxy $this->stockEntry($entry, $content); } + /** + * Use a Symfony validator to ensure the language is well formatted. + * + * @param Entry $entry + * @param string $value Language to validate and save + */ + public function updateLanguage(Entry $entry, $value) + { + // some lang are defined as fr-FR, es-ES. + // replacing - by _ might increase language support + $value = str_replace('-', '_', $value); + + $errors = $this->validator->validate( + $value, + (new LocaleConstraint()) + ); + + if (0 === count($errors)) { + $entry->setLanguage($value); + + return; + } + + $this->logger->warning('Language validation failed. ' . (string) $errors); + } + + /** + * Use a Symfony validator to ensure the preview picture is a real url. + * + * @param Entry $entry + * @param string $value URL to validate and save + */ + public function updatePreviewPicture(Entry $entry, $value) + { + $errors = $this->validator->validate( + $value, + (new UrlConstraint()) + ); + + if (0 === count($errors)) { + $entry->setPreviewPicture($value); + + return; + } + + $this->logger->warning('PreviewPicture validation failed. ' . (string) $errors); + } + + /** + * Update date. + * + * @param Entry $entry + * @param string $value Date to validate and save + */ + public function updatePublishedAt(Entry $entry, $value) + { + $date = $value; + + // is it a timestamp? + if (filter_var($date, FILTER_VALIDATE_INT) !== false) { + $date = '@' . $value; + } + + try { + $entry->setPublishedAt(new \DateTime($date)); + } catch (\Exception $e) { + $this->logger->warning('Error while defining date', ['e' => $e, 'url' => $entry->getUrl(), 'date' => $value]); + } + } + /** * Stock entry with fetched or imported content. * Will fall back to OpenGraph data if available. @@ -75,9 +145,17 @@ class ContentProxy */ private function stockEntry(Entry $entry, array $content) { - $title = $content['title']; - if (!$title && !empty($content['open_graph']['og_title'])) { - $title = $content['open_graph']['og_title']; + $entry->setUrl($content['url']); + + $domainName = parse_url($entry->getUrl(), PHP_URL_HOST); + if (false !== $domainName) { + $entry->setDomainName($domainName); + } + + if (!empty($content['title'])) { + $entry->setTitle($content['title']); + } elseif (!empty($content['open_graph']['og_title'])) { + $entry->setTitle($content['open_graph']['og_title']); } $html = $content['html']; @@ -90,24 +168,11 @@ class ContentProxy } } - $entry->setUrl($content['url']); - $entry->setTitle($title); $entry->setContent($html); - $entry->setHttpStatus(isset($content['status']) ? $content['status'] : ''); - - if (!empty($content['date'])) { - $date = $content['date']; - - // is it a timestamp? - if (filter_var($date, FILTER_VALIDATE_INT) !== false) { - $date = '@' . $content['date']; - } + $entry->setReadingTime(Utils::getReadingTime($html)); - try { - $entry->setPublishedAt(new \DateTime($date)); - } catch (\Exception $e) { - $this->logger->warning('Error while defining date', ['e' => $e, 'url' => $content['url'], 'date' => $content['date']]); - } + if (!empty($content['status'])) { + $entry->setHttpStatus($content['status']); } if (!empty($content['authors']) && is_array($content['authors'])) { @@ -118,30 +183,25 @@ class ContentProxy $entry->setHeaders($content['all_headers']); } - $this->validateAndSetLanguage( - $entry, - isset($content['language']) ? $content['language'] : null - ); + if (!empty($content['date'])) { + $this->updatePublishedAt($entry, $content['date']); + } - $this->validateAndSetPreviewPicture( - $entry, - isset($content['open_graph']['og_image']) ? $content['open_graph']['og_image'] : null - ); + if (!empty($content['language'])) { + $this->updateLanguage($entry, $content['language']); + } + + if (!empty($content['open_graph']['og_image'])) { + $this->updatePreviewPicture($entry, $content['open_graph']['og_image']); + } // if content is an image, define it as a preview too if (!empty($content['content_type']) && in_array($this->mimeGuesser->guess($content['content_type']), ['jpeg', 'jpg', 'gif', 'png'], true)) { - $this->validateAndSetPreviewPicture( - $entry, - $content['url'] - ); + $this->updatePreviewPicture($entry, $content['url']); } - $entry->setMimetype(isset($content['content_type']) ? $content['content_type'] : ''); - $entry->setReadingTime(Utils::getReadingTime($html)); - - $domainName = parse_url($entry->getUrl(), PHP_URL_HOST); - if (false !== $domainName) { - $entry->setDomainName($domainName); + if (!empty($content['content_type'])) { + $entry->setMimetype($content['content_type']); } try { @@ -165,52 +225,4 @@ class ContentProxy { return !empty($content['title']) && !empty($content['html']) && !empty($content['url']); } - - /** - * Use a Symfony validator to ensure the language is well formatted. - * - * @param Entry $entry - * @param string $value Language to validate - */ - private function validateAndSetLanguage($entry, $value) - { - // some lang are defined as fr-FR, es-ES. - // replacing - by _ might increase language support - $value = str_replace('-', '_', $value); - - $errors = $this->validator->validate( - $value, - (new LocaleConstraint()) - ); - - if (0 === count($errors)) { - $entry->setLanguage($value); - - return; - } - - $this->logger->warning('Language validation failed. ' . (string) $errors); - } - - /** - * Use a Symfony validator to ensure the preview picture is a real url. - * - * @param Entry $entry - * @param string $value URL to validate - */ - private function validateAndSetPreviewPicture($entry, $value) - { - $errors = $this->validator->validate( - $value, - (new UrlConstraint()) - ); - - if (0 === count($errors)) { - $entry->setPreviewPicture($value); - - return; - } - - $this->logger->warning('PreviewPicture validation failed. ' . (string) $errors); - } }