Fixed reading time in epub/pdf exports

This commit is contained in:
Nicolas Lœuillet 2021-08-31 09:22:31 +02:00 committed by Kevin Decherf
parent ca845b3204
commit ff1c4f6090
2 changed files with 22 additions and 6 deletions

View file

@ -8,8 +8,10 @@ use JMS\Serializer\SerializerBuilder;
use PHPePub\Core\EPub; use PHPePub\Core\EPub;
use PHPePub\Core\Structure\OPF\DublinCore; use PHPePub\Core\Structure\OPF\DublinCore;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Translation\TranslatorInterface; use Symfony\Component\Translation\TranslatorInterface;
use Wallabag\CoreBundle\Entity\Entry; use Wallabag\CoreBundle\Entity\Entry;
use Wallabag\UserBundle\Entity\User;
/** /**
* This class doesn't have unit test BUT it's fully covered by a functional test with ExportControllerTest. * This class doesn't have unit test BUT it's fully covered by a functional test with ExportControllerTest.
@ -23,17 +25,26 @@ class EntriesExport
private $entries = []; private $entries = [];
private $author = 'wallabag'; private $author = 'wallabag';
private $language = ''; private $language = '';
private $user;
/** /**
* @param TranslatorInterface $translator Translator service * @param TranslatorInterface $translator Translator service
* @param string $wallabagUrl Wallabag instance url * @param string $wallabagUrl Wallabag instance url
* @param string $logoPath Path to the logo FROM THE BUNDLE SCOPE * @param string $logoPath Path to the logo FROM THE BUNDLE SCOPE
* @param TokenStorageInterface $tokenStorage Needed to retrieve the current user
*/ */
public function __construct(TranslatorInterface $translator, $wallabagUrl, $logoPath) public function __construct(TranslatorInterface $translator, $wallabagUrl, $logoPath, TokenStorageInterface $tokenStorage)
{ {
$this->translator = $translator; $this->translator = $translator;
$this->wallabagUrl = $wallabagUrl; $this->wallabagUrl = $wallabagUrl;
$this->logoPath = $logoPath; $this->logoPath = $logoPath;
/* @var User $user */
$this->user = $tokenStorage->getToken() ? $tokenStorage->getToken()->getUser() : null;
if (null === $this->user || !\is_object($this->user)) {
return;
}
} }
/** /**
@ -202,12 +213,14 @@ class EntriesExport
$publishedDate = $entry->getPublishedAt()->format('Y-m-d'); $publishedDate = $entry->getPublishedAt()->format('Y-m-d');
} }
$readingTime = $entry->getReadingTime() / $this->user->getConfig()->getReadingSpeed() * 200;
$titlepage = $content_start . $titlepage = $content_start .
'<h1>' . $entry->getTitle() . '</h1>' . '<h1>' . $entry->getTitle() . '</h1>' .
'<dl>' . '<dl>' .
'<dt>' . $this->translator->trans('entry.view.published_by') . '</dt><dd>' . $authors . '</dd>' . '<dt>' . $this->translator->trans('entry.view.published_by') . '</dt><dd>' . $authors . '</dd>' .
'<dt>' . $this->translator->trans('entry.metadata.published_on') . '</dt><dd>' . $publishedDate . '</dd>' . '<dt>' . $this->translator->trans('entry.metadata.published_on') . '</dt><dd>' . $publishedDate . '</dd>' .
'<dt>' . $this->translator->trans('entry.metadata.reading_time') . '</dt><dd>' . $this->translator->trans('entry.metadata.reading_time_minutes_short', ['%readingTime%' => $entry->getReadingTime()]) . '</dd>' . '<dt>' . $this->translator->trans('entry.metadata.reading_time') . '</dt><dd>' . $this->translator->trans('entry.metadata.reading_time_minutes_short', ['%readingTime%' => $readingTime]) . '</dd>' .
'<dt>' . $this->translator->trans('entry.metadata.added_on') . '</dt><dd>' . $entry->getCreatedAt()->format('Y-m-d') . '</dd>' . '<dt>' . $this->translator->trans('entry.metadata.added_on') . '</dt><dd>' . $entry->getCreatedAt()->format('Y-m-d') . '</dd>' .
'<dt>' . $this->translator->trans('entry.metadata.address') . '</dt><dd><a href="' . $entry->getUrl() . '">' . $entry->getUrl() . '</a></dd>' . '<dt>' . $this->translator->trans('entry.metadata.address') . '</dt><dd><a href="' . $entry->getUrl() . '">' . $entry->getUrl() . '</a></dd>' .
'</dl>' . '</dl>' .
@ -318,11 +331,13 @@ class EntriesExport
$authors = implode(',', $publishedBy); $authors = implode(',', $publishedBy);
} }
$readingTime = $entry->getReadingTime() / $this->user->getConfig()->getReadingSpeed() * 200;
$pdf->addPage(); $pdf->addPage();
$html = '<h1>' . $entry->getTitle() . '</h1>' . $html = '<h1>' . $entry->getTitle() . '</h1>' .
'<dl>' . '<dl>' .
'<dt>' . $this->translator->trans('entry.view.published_by') . '</dt><dd>' . $authors . '</dd>' . '<dt>' . $this->translator->trans('entry.view.published_by') . '</dt><dd>' . $authors . '</dd>' .
'<dt>' . $this->translator->trans('entry.metadata.reading_time') . '</dt><dd>' . $this->translator->trans('entry.metadata.reading_time_minutes_short', ['%readingTime%' => $entry->getReadingTime()]) . '</dd>' . '<dt>' . $this->translator->trans('entry.metadata.reading_time') . '</dt><dd>' . $this->translator->trans('entry.metadata.reading_time_minutes_short', ['%readingTime%' => $readingTime]) . '</dd>' .
'<dt>' . $this->translator->trans('entry.metadata.added_on') . '</dt><dd>' . $entry->getCreatedAt()->format('Y-m-d') . '</dd>' . '<dt>' . $this->translator->trans('entry.metadata.added_on') . '</dt><dd>' . $entry->getCreatedAt()->format('Y-m-d') . '</dd>' .
'<dt>' . $this->translator->trans('entry.metadata.address') . '</dt><dd><a href="' . $entry->getUrl() . '">' . $entry->getUrl() . '</a></dd>' . '<dt>' . $this->translator->trans('entry.metadata.address') . '</dt><dd><a href="' . $entry->getUrl() . '">' . $entry->getUrl() . '</a></dd>' .
'</dl>'; '</dl>';

View file

@ -151,6 +151,7 @@ services:
- "@translator" - "@translator"
- '%domain_name%' - '%domain_name%'
- web/img/appicon/apple-touch-icon-152.png - web/img/appicon/apple-touch-icon-152.png
- "@security.token_storage"
wallabag.operator.array.matches: wallabag.operator.array.matches:
class: Wallabag\CoreBundle\Operator\PHP\Matches class: Wallabag\CoreBundle\Operator\PHP\Matches