]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - src/Wallabag/ImportBundle/Import/WallabagV1Import.php
import tags from v1 (#1657)
[github/wallabag/wallabag.git] / src / Wallabag / ImportBundle / Import / WallabagV1Import.php
index 02327312515fcc4a58f38d2f10c1f0f8b9137f45..bbac6eafc8dbd2a8137b66122facb7f3f9adbac6 100644 (file)
@@ -6,6 +6,7 @@ use Psr\Log\LoggerInterface;
 use Psr\Log\NullLogger;
 use Doctrine\ORM\EntityManager;
 use Wallabag\CoreBundle\Entity\Entry;
+use Wallabag\CoreBundle\Entity\Tag;
 use Wallabag\UserBundle\Entity\User;
 use Wallabag\CoreBundle\Tools\Utils;
 use Wallabag\CoreBundle\Helper\ContentProxy;
@@ -15,7 +16,7 @@ class WallabagV1Import implements ImportInterface
     protected $user;
     protected $em;
     protected $logger;
-    private $contentProxy;
+    protected $contentProxy;
     protected $skippedEntries = 0;
     protected $importedEntries = 0;
     protected $filepath;
@@ -126,10 +127,9 @@ class WallabagV1Import implements ImportInterface
     protected function parseEntries($entries)
     {
         $i = 1;
-        /*
-         * Untitled in all languages from v1. This should never have been translated
-         */
-        $untitled = array('Untitled', 'Sans titre', 'podle nadpisu', 'Sin título', 'با عنوان', 'per titolo', 'Sem título', 'Без названия', 'po naslovu', 'Без назви');
+
+        //Untitled in all languages from v1. This should never have been translated
+        $untitled = array('Untitled', 'Sans titre', 'podle nadpisu', 'Sin título', 'با عنوان', 'per titolo', 'Sem título', 'Без названия', 'po naslovu', 'Без назви', 'No title found', '');
 
         foreach ($entries as $importedEntry) {
             $existingEntry = $this->em
@@ -145,13 +145,17 @@ class WallabagV1Import implements ImportInterface
             $entry = new Entry($this->user);
             $entry->setUrl($importedEntry['url']);
             if (in_array($importedEntry['title'], $untitled)) {
-                $entry = $this->contentProxy->updateEntry($entry, $entry->getUrl());
+                $entry = $this->contentProxy->updateEntry($entry, $importedEntry['url']);
             } else {
                 $entry->setContent($importedEntry['content']);
                 $entry->setTitle($importedEntry['title']);
                 $entry->setReadingTime(Utils::getReadingTime($importedEntry['content']));
                 $entry->setDomainName(parse_url($importedEntry['url'], PHP_URL_HOST));
             }
+            if (array_key_exists('tags', $importedEntry) && $importedEntry['tags'] != '') {
+                $tags = explode(',', $importedEntry['tags']);
+                $this->assignTagsToEntry($entry, $tags);
+            }
             $entry->setArchived($importedEntry['is_read']);
             $entry->setStarred($importedEntry['is_fav']);
 
@@ -167,4 +171,22 @@ class WallabagV1Import implements ImportInterface
 
         $this->em->flush();
     }
+
+    private function assignTagsToEntry(Entry $entry, $tags)
+    {
+        foreach ($tags as $tag) {
+            $label = trim($tag);
+            $tagEntity = $this->em
+                ->getRepository('WallabagCoreBundle:Tag')
+                ->findOneByLabel($label);
+            if (is_object($tagEntity)) {
+                $entry->addTag($tagEntity);
+            } else {
+                $newTag = new Tag();
+                $newTag->setLabel($label);
+                $entry->addTag($newTag);
+            }
+            $this->em->flush();
+        }
+    }
 }