mirror of
https://github.com/wallabag/wallabag.git
synced 2024-10-31 22:28:54 +00:00
Fix empty title and domain_name when exception is thrown during fetch
Add a new helper to set a default title when it's empty: 1/ use basename part of entry's path, if any 2/ or use domain name Fixes #2053 Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
This commit is contained in:
parent
70265817ae
commit
af29e1bf07
4 changed files with 59 additions and 4 deletions
|
@ -381,6 +381,14 @@ class EntryRestController extends WallabagRestController
|
|||
}
|
||||
}
|
||||
|
||||
if (empty($entry->getDomainName())) {
|
||||
$this->get('wallabag_core.content_proxy')->setEntryDomainName($entry);
|
||||
}
|
||||
|
||||
if (empty($entry->getTitle())) {
|
||||
$this->get('wallabag_core.content_proxy')->setDefaultEntryTitle($entry);
|
||||
}
|
||||
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$em->persist($entry);
|
||||
$em->flush();
|
||||
|
@ -490,6 +498,14 @@ class EntryRestController extends WallabagRestController
|
|||
$entry->setOriginUrl($data['origin_url']);
|
||||
}
|
||||
|
||||
if (empty($entry->getDomainName())) {
|
||||
$this->get('wallabag_core.content_proxy')->setEntryDomainName($entry);
|
||||
}
|
||||
|
||||
if (empty($entry->getTitle())) {
|
||||
$this->get('wallabag_core.content_proxy')->setDefaultEntryTitle($entry);
|
||||
}
|
||||
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$em->persist($entry);
|
||||
$em->flush();
|
||||
|
|
|
@ -502,6 +502,14 @@ class EntryController extends Controller
|
|||
$message = 'flashes.entry.notice.' . $prefixMessage . '_failed';
|
||||
}
|
||||
|
||||
if (empty($entry->getDomainName())) {
|
||||
$this->get('wallabag_core.content_proxy')->setEntryDomainName($entry);
|
||||
}
|
||||
|
||||
if (empty($entry->getTitle())) {
|
||||
$this->get('wallabag_core.content_proxy')->setDefaultEntryTitle($entry);
|
||||
}
|
||||
|
||||
$this->get('session')->getFlashBag()->add('notice', $message);
|
||||
}
|
||||
|
||||
|
|
|
@ -144,6 +144,38 @@ class ContentProxy
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to extract and save host from entry url.
|
||||
*
|
||||
* @param Entry $entry
|
||||
*/
|
||||
public function setEntryDomainName(Entry $entry)
|
||||
{
|
||||
$domainName = parse_url($entry->getUrl(), PHP_URL_HOST);
|
||||
if (false !== $domainName) {
|
||||
$entry->setDomainName($domainName);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to set a default title using:
|
||||
* - url basename, if applicable
|
||||
* - hostname.
|
||||
*
|
||||
* @param Entry $entry
|
||||
*/
|
||||
public function setDefaultEntryTitle(Entry $entry)
|
||||
{
|
||||
$url = parse_url($entry->getUrl());
|
||||
$path = pathinfo($url['path'], PATHINFO_BASENAME);
|
||||
|
||||
if (empty($path)) {
|
||||
$path = $url['host'];
|
||||
}
|
||||
|
||||
$entry->setTitle($path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Stock entry with fetched or imported content.
|
||||
* Will fall back to OpenGraph data if available.
|
||||
|
@ -155,10 +187,7 @@ class ContentProxy
|
|||
{
|
||||
$entry->setUrl($content['url']);
|
||||
|
||||
$domainName = parse_url($entry->getUrl(), PHP_URL_HOST);
|
||||
if (false !== $domainName) {
|
||||
$entry->setDomainName($domainName);
|
||||
}
|
||||
$this->setEntryDomainName($entry);
|
||||
|
||||
if (!empty($content['title'])) {
|
||||
$entry->setTitle($content['title']);
|
||||
|
|
|
@ -501,6 +501,8 @@ class EntryRestControllerTest extends WallabagApiTestCase
|
|||
$content = json_decode($this->client->getResponse()->getContent(), true);
|
||||
$this->assertGreaterThan(0, $content['id']);
|
||||
$this->assertSame('http://www.example.com/', $content['url']);
|
||||
$this->assertSame('www.example.com', $content['domain_name']);
|
||||
$this->assertSame('www.example.com', $content['title']);
|
||||
} finally {
|
||||
// Remove the created entry to avoid side effects on other tests
|
||||
if (isset($content['id'])) {
|
||||
|
|
Loading…
Reference in a new issue