]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - src/Wallabag/ImportBundle/Import/WallabagV1Import.php
php-cs-fixer
[github/wallabag/wallabag.git] / src / Wallabag / ImportBundle / Import / WallabagV1Import.php
index 6f8feaf36b2924c0bc2ea717103bfa59689ef5d7..b9bb525ab5f20422f388370fe1b44b8bca9d228c 100644 (file)
@@ -2,44 +2,17 @@
 
 namespace Wallabag\ImportBundle\Import;
 
-use Psr\Log\LoggerInterface;
-use Psr\Log\NullLogger;
-use Doctrine\ORM\EntityManager;
-use Wallabag\CoreBundle\Entity\Entry;
-use Wallabag\UserBundle\Entity\User;
-use Wallabag\CoreBundle\Tools\Utils;
-
-class WallabagV1Import implements ImportInterface
+class WallabagV1Import extends WallabagImport
 {
-    private $user;
-    private $em;
-    private $logger;
-    private $skippedEntries = 0;
-    private $importedEntries = 0;
-    private $filepath;
+    protected $fetchingErrorMessage;
+    protected $fetchingErrorMessageTitle;
 
-    public function __construct(EntityManager $em)
-    {
-        $this->em = $em;
-        $this->logger = new NullLogger();
-    }
-
-    public function setLogger(LoggerInterface $logger)
-    {
-        $this->logger = $logger;
-    }
-
-    /**
-     * We define the user in a custom call because on the import command there is no logged in user.
-     * So we can't retrieve user from the `security.token_storage` service.
-     *
-     * @param User $user
-     */
-    public function setUser(User $user)
+    public function __construct($em, $contentProxy, $tagsAssigner, $eventDispatcher, $fetchingErrorMessageTitle, $fetchingErrorMessage)
     {
-        $this->user = $user;
+        $this->fetchingErrorMessageTitle = $fetchingErrorMessageTitle;
+        $this->fetchingErrorMessage = $fetchingErrorMessage;
 
-        return $this;
+        parent::__construct($em, $contentProxy, $tagsAssigner, $eventDispatcher);
     }
 
     /**
@@ -63,97 +36,45 @@ class WallabagV1Import implements ImportInterface
      */
     public function getDescription()
     {
-        return 'This importer will import all your wallabag v1 articles. On your config page, click on "JSON export" in the "Export your wallabag data" section. You will have a "wallabag-export-1-xxxx-xx-xx.json" file.';
+        return 'import.wallabag_v1.description';
     }
 
     /**
      * {@inheritdoc}
      */
-    public function import()
+    protected function prepareEntry($entry = [])
     {
-        if (!$this->user) {
-            $this->logger->error('WallabagV1Import: user is not defined');
-
-            return false;
-        }
-
-        if (!file_exists($this->filepath) || !is_readable($this->filepath)) {
-            $this->logger->error('WallabagV1Import: unable to read file', array('filepath' => $this->filepath));
+        $data = [
+            'title' => $entry['title'],
+            'html' => $entry['content'],
+            'url' => $entry['url'],
+            'is_archived' => $entry['is_read'] || $this->markAsRead,
+            'is_starred' => $entry['is_fav'],
+            'tags' => '',
+            'created_at' => '',
+        ];
 
-            return false;
+        // In case of a bad fetch in v1, replace title and content with v2 error strings
+        // If fetching fails again, they will get this instead of the v1 strings
+        if (\in_array($entry['title'], $this->untitled, true)) {
+            $data['title'] = $this->fetchingErrorMessageTitle;
+            $data['html'] = $this->fetchingErrorMessage;
         }
 
-        $data = json_decode(file_get_contents($this->filepath), true);
-
-        if (empty($data)) {
-            return false;
+        if (array_key_exists('tags', $entry) && '' !== $entry['tags']) {
+            $data['tags'] = $entry['tags'];
         }
 
-        $this->parseEntries($data);
-
-        return true;
+        return $data;
     }
 
     /**
      * {@inheritdoc}
      */
-    public function getSummary()
+    protected function setEntryAsRead(array $importedEntry)
     {
-        return [
-            'skipped' => $this->skippedEntries,
-            'imported' => $this->importedEntries,
-        ];
-    }
-
-    /**
-     * Set file path to the json file.
-     *
-     * @param string $filepath
-     */
-    public function setFilepath($filepath)
-    {
-        $this->filepath = $filepath;
-
-        return $this;
-    }
-
-    /**
-     * @param $entries
-     */
-    private function parseEntries($entries)
-    {
-        $i = 1;
-
-        foreach ($entries as $importedEntry) {
-            $existingEntry = $this->em
-                ->getRepository('WallabagCoreBundle:Entry')
-                ->findByUrlAndUserId($importedEntry['url'], $this->user->getId());
-
-            if (false !== $existingEntry) {
-                ++$this->skippedEntries;
-                continue;
-            }
-
-            // @see ContentProxy->updateEntry
-            $entry = new Entry($this->user);
-            $entry->setUrl($importedEntry['url']);
-            $entry->setTitle($importedEntry['title']);
-            $entry->setArchived($importedEntry['is_read']);
-            $entry->setStarred($importedEntry['is_fav']);
-            $entry->setContent($importedEntry['content']);
-            $entry->setReadingTime(Utils::getReadingTime($importedEntry['content']));
-            $entry->setDomainName(parse_url($importedEntry['url'], PHP_URL_HOST));
-
-            $this->em->persist($entry);
-            ++$this->importedEntries;
-
-            // flush every 20 entries
-            if (($i % 20) === 0) {
-                $this->em->flush();
-            }
-            ++$i;
-        }
+        $importedEntry['is_read'] = 1;
 
-        $this->em->flush();
+        return $importedEntry;
     }
 }