]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - src/Wallabag/ImportBundle/Import/AbstractImport.php
Merge pull request #4152 from ldidry/add-env-var-dev.sh
[github/wallabag/wallabag.git] / src / Wallabag / ImportBundle / Import / AbstractImport.php
index 9b6242967bc66074e1bfc18b4032268fe4da5e15..1b073e99ae3be65395e88d01ea8966f350ca745f 100644 (file)
@@ -2,17 +2,17 @@
 
 namespace Wallabag\ImportBundle\Import;
 
+use Doctrine\ORM\EntityManager;
+use OldSound\RabbitMqBundle\RabbitMq\ProducerInterface;
 use Psr\Log\LoggerInterface;
 use Psr\Log\NullLogger;
-use Doctrine\ORM\EntityManager;
-use Wallabag\CoreBundle\Helper\ContentProxy;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 use Wallabag\CoreBundle\Entity\Entry;
 use Wallabag\CoreBundle\Entity\Tag;
+use Wallabag\CoreBundle\Event\EntrySavedEvent;
+use Wallabag\CoreBundle\Helper\ContentProxy;
 use Wallabag\CoreBundle\Helper\TagsAssigner;
 use Wallabag\UserBundle\Entity\User;
-use OldSound\RabbitMqBundle\RabbitMq\ProducerInterface;
-use Symfony\Component\EventDispatcher\EventDispatcherInterface;
-use Wallabag\CoreBundle\Event\EntrySavedEvent;
 
 abstract class AbstractImport implements ImportInterface
 {
@@ -46,8 +46,6 @@ abstract class AbstractImport implements ImportInterface
     /**
      * Set RabbitMQ/Redis Producer to send each entry to a queue.
      * This method should be called when user has enabled RabbitMQ.
-     *
-     * @param ProducerInterface $producer
      */
     public function setProducer(ProducerInterface $producer)
     {
@@ -57,8 +55,6 @@ abstract class AbstractImport implements ImportInterface
     /**
      * Set current user.
      * Could the current *connected* user or one retrieve by the consumer.
-     *
-     * @param User $user
      */
     public function setUser(User $user)
     {
@@ -97,6 +93,32 @@ abstract class AbstractImport implements ImportInterface
         return $this;
     }
 
+    /**
+     * {@inheritdoc}
+     */
+    public function getSummary()
+    {
+        return [
+            'skipped' => $this->skippedEntries,
+            'imported' => $this->importedEntries,
+            'queued' => $this->queuedEntries,
+        ];
+    }
+
+    /**
+     * Parse one entry.
+     *
+     * @return Entry
+     */
+    abstract public function parseEntry(array $importedEntry);
+
+    /**
+     * Validate that an entry is valid (like has some required keys, etc.).
+     *
+     * @return bool
+     */
+    abstract public function validateEntry(array $importedEntry);
+
     /**
      * Fetch content from the ContentProxy (using graby).
      * If it fails return the given entry to be saved in all case (to avoid user to loose the content).
@@ -119,10 +141,8 @@ abstract class AbstractImport implements ImportInterface
 
     /**
      * Parse and insert all given entries.
-     *
-     * @param $entries
      */
-    protected function parseEntries($entries)
+    protected function parseEntries(array $entries)
     {
         $i = 1;
         $entryToBeFlushed = [];
@@ -132,6 +152,10 @@ abstract class AbstractImport implements ImportInterface
                 $importedEntry = $this->setEntryAsRead($importedEntry);
             }
 
+            if (false === $this->validateEntry($importedEntry)) {
+                continue;
+            }
+
             $entry = $this->parseEntry($importedEntry);
 
             if (null === $entry) {
@@ -144,7 +168,7 @@ abstract class AbstractImport implements ImportInterface
             $entryToBeFlushed[] = $entry;
 
             // flush every 20 entries
-            if (($i % 20) === 0) {
+            if (0 === ($i % 20)) {
                 $this->em->flush();
 
                 foreach ($entryToBeFlushed as $entry) {
@@ -176,8 +200,6 @@ abstract class AbstractImport implements ImportInterface
      *
      * Faster parse entries for Producer.
      * We don't care to make check at this time. They'll be done by the consumer.
-     *
-     * @param array $entries
      */
     protected function parseEntriesForProducer(array $entries)
     {
@@ -195,33 +217,10 @@ abstract class AbstractImport implements ImportInterface
         }
     }
 
-    /**
-     * {@inheritdoc}
-     */
-    public function getSummary()
-    {
-        return [
-            'skipped' => $this->skippedEntries,
-            'imported' => $this->importedEntries,
-            'queued' => $this->queuedEntries,
-        ];
-    }
-
-    /**
-     * Parse one entry.
-     *
-     * @param array $importedEntry
-     *
-     * @return Entry
-     */
-    abstract public function parseEntry(array $importedEntry);
-
     /**
      * Set current imported entry to archived / read.
      * Implementation is different accross all imports.
      *
-     * @param array $importedEntry
-     *
      * @return array
      */
     abstract protected function setEntryAsRead(array $importedEntry);