X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2FWallabag%2FImportBundle%2FImport%2FWallabagV1Import.php;h=bbac6eafc8dbd2a8137b66122facb7f3f9adbac6;hb=fca2b05200f3e681c3ee195b8bb00088a8de0cf8;hp=aff5af403352fde420c8ae5ff9323258dd865466;hpb=7019c7cf6c6af39c0f458769e20c3f9306477943;p=github%2Fwallabag%2Fwallabag.git diff --git a/src/Wallabag/ImportBundle/Import/WallabagV1Import.php b/src/Wallabag/ImportBundle/Import/WallabagV1Import.php index aff5af40..bbac6eaf 100644 --- a/src/Wallabag/ImportBundle/Import/WallabagV1Import.php +++ b/src/Wallabag/ImportBundle/Import/WallabagV1Import.php @@ -6,22 +6,26 @@ 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; class WallabagV1Import implements ImportInterface { - private $user; - private $em; - private $logger; - private $skippedEntries = 0; - private $importedEntries = 0; - private $filepath; - - public function __construct(EntityManager $em) + protected $user; + protected $em; + protected $logger; + protected $contentProxy; + protected $skippedEntries = 0; + protected $importedEntries = 0; + protected $filepath; + + public function __construct(EntityManager $em, ContentProxy $contentProxy) { $this->em = $em; $this->logger = new NullLogger(); + $this->contentProxy = $contentProxy; } public function setLogger(LoggerInterface $logger) @@ -47,7 +51,7 @@ class WallabagV1Import implements ImportInterface */ public function getName() { - return 'Wallabag v1'; + return 'wallabag v1'; } /** @@ -72,13 +76,13 @@ class WallabagV1Import implements ImportInterface public function import() { if (!$this->user) { - $this->logger->error('WallabagV1Import: user is not defined'); + $this->logger->error('WallabagImport: 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)); + $this->logger->error('WallabagImport: unable to read file', array('filepath' => $this->filepath)); return false; } @@ -120,14 +124,17 @@ class WallabagV1Import implements ImportInterface /** * @param $entries */ - private function parseEntries($entries) + 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', 'Без назви', 'No title found', ''); + foreach ($entries as $importedEntry) { $existingEntry = $this->em ->getRepository('WallabagCoreBundle:Entry') - ->existByUrlAndUserId($importedEntry['url'], $this->user->getId()); + ->findByUrlAndUserId($importedEntry['url'], $this->user->getId()); if (false !== $existingEntry) { ++$this->skippedEntries; @@ -137,23 +144,49 @@ class WallabagV1Import implements ImportInterface // @see ContentProxy->updateEntry $entry = new Entry($this->user); $entry->setUrl($importedEntry['url']); - $entry->setTitle($importedEntry['title']); + if (in_array($importedEntry['title'], $untitled)) { + $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']); - $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) { - $em->flush(); + $this->em->flush(); } ++$i; } $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(); + } + } }