return;
}
- $em = $args->getEntityManager();
+ $config = new $this->configClass();
+ $config->setEntityManager($args->getEntityManager());
// field content has been updated
if ($args->hasChangedField('content')) {
- $html = $this->downloadImages($em, $entity);
+ $html = $this->downloadImages($config, $entity);
- if (null !== $html) {
+ if (false !== $html) {
$args->setNewValue('content', $html);
}
}
// field preview picture has been updated
if ($args->hasChangedField('previewPicture')) {
- $previewPicture = $this->downloadPreviewImage($em, $entity);
+ $previewPicture = $this->downloadPreviewImage($config, $entity);
- if (null !== $previewPicture) {
+ if (false !== $previewPicture) {
$entity->setPreviewPicture($previewPicture);
}
}
// update all images inside the html
$html = $this->downloadImages($config, $entity);
- if (null !== $html) {
+ if (false !== $html) {
$entity->setContent($html);
}
// update preview picture
$previewPicture = $this->downloadPreviewImage($config, $entity);
- if (null !== $previewPicture) {
+ if (false !== $previewPicture) {
$entity->setPreviewPicture($previewPicture);
}
}
+ /**
+ * Download all images from the html.
+ *
+ * @param Config $config
+ * @param Entry $entry
+ *
+ * @return string|false False in case of async
+ */
public function downloadImages(Config $config, Entry $entry)
{
// if ($config->get('download_images_with_rabbitmq')) {
);
}
+ /**
+ * Download the preview picture.
+ *
+ * @param Config $config
+ * @param Entry $entry
+ *
+ * @return string|false False in case of async
+ */
public function downloadPreviewImage(Config $config, Entry $entry)
{
// if ($config->get('download_images_with_rabbitmq')) {
$entry->setUrl($content['url'] ?: $url);
$entry->setTitle($title);
+ $entry->setContent($html);
$entry->setLanguage($content['language']);
$entry->setMimetype($content['content_type']);
$entry->setDomainName($domainName);
}
- $entry->setContent($html);
-
if (isset($content['open_graph']['og_image'])) {
$entry->setPreviewPicture($content['open_graph']['og_image']);
}
// build image path
$absolutePath = $this->getAbsoluteLink($url, $imagePath);
if (false === $absolutePath) {
- $this->logger->log('debug', 'Can not determine the absolute path for that image, skipping.');
+ $this->logger->log('error', 'Can not determine the absolute path for that image, skipping.');
return false;
}
- $res = $this->client->get(
- $absolutePath,
- ['exceptions' => false]
- );
+ try {
+ $res = $this->client->get($absolutePath);
+ } catch (\Exception $e) {
+ $this->logger->log('error', 'Can not retrieve image, skipping.', ['exception' => $e]);
+
+ return false;
+ }
$ext = $this->mimeGuesser->guess($res->getHeader('content-type'));
$this->logger->log('debug', 'Checking extension', ['ext' => $ext, 'header' => $res->getHeader('content-type')]);
- if (!in_array($ext, ['jpeg', 'jpg', 'gif', 'png'])) {
- $this->logger->log('debug', 'Processed image with not allowed extension. Skipping '.$imagePath);
+ if (!in_array($ext, ['jpeg', 'jpg', 'gif', 'png'], true)) {
+ $this->logger->log('error', 'Processed image with not allowed extension. Skipping '.$imagePath);
return false;
}
$im = false;
}
- if ($im === false) {
+ if (false === $im) {
$this->logger->log('error', 'Error while regenerating image', ['path' => $localPath]);
return false;
return $absolute->get_uri();
}
+ $this->logger->log('error', 'Can not make an absolute link', ['base' => $base, 'url' => $url]);
+
return false;
}
}
<?php
-namespace Tests\Wallabag\CoreBundle\EventListener;
+namespace Tests\Wallabag\CoreBundle\Event\Listener;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\KernelEvents;
-use Wallabag\CoreBundle\EventListener\LocaleListener;
+use Wallabag\CoreBundle\Event\Listener\LocaleListener;
class LocaleListenerTest extends \PHPUnit_Framework_TestCase
{
<?php
-namespace Tests\Wallabag\CoreBundle\EventListener;
+namespace Tests\Wallabag\CoreBundle\Event\Listener;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Wallabag\CoreBundle\Entity\Config;
-use Wallabag\CoreBundle\EventListener\UserLocaleListener;
+use Wallabag\CoreBundle\Event\Listener\UserLocaleListener;
use Wallabag\UserBundle\Entity\User;
class UserLocaleListenerTest extends \PHPUnit_Framework_TestCase
<?php
-namespace Tests\Wallabag\CoreBundle\Subscriber;
+namespace Tests\Wallabag\CoreBundle\Event\Subscriber;
use Doctrine\Common\EventManager;
use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
use Doctrine\ORM\Mapping\ClassMetadata;
-use Wallabag\CoreBundle\Subscriber\TablePrefixSubscriber;
+use Wallabag\CoreBundle\Event\Subscriber\TablePrefixSubscriber;
class TablePrefixSubscriberTest extends \PHPUnit_Framework_TestCase
{
$this->assertContains('/assets/images/4/2/4258f71e/ebe60399.'.$extension, $res);
}
+ public function testProcessSingleImageWithBadUrl()
+ {
+ $client = new Client();
+
+ $mock = new Mock([
+ new Response(404, []),
+ ]);
+
+ $client->getEmitter()->attach($mock);
+
+ $logHandler = new TestHandler();
+ $logger = new Logger('test', array($logHandler));
+
+ $download = new DownloadImages($client, sys_get_temp_dir().'/wallabag_test', $logger);
+ $res = $download->processSingleImage('T9qgcHc.jpg', 'http://imgur.com/gallery/WxtWY');
+
+ $this->assertFalse($res, 'Image can not be found, so it will not be replaced');
+ }
+
public function testProcessSingleImageWithBadImage()
{
$client = new Client();