diff options
author | Jeremy Benoist <jeremy.benoist@gmail.com> | 2018-12-18 13:14:42 +0100 |
---|---|---|
committer | Jeremy Benoist <jeremy.benoist@gmail.com> | 2019-01-03 09:42:06 +0100 |
commit | 9f8f188d928b47503d39348c5990379a572b570a (patch) | |
tree | 0e2b7e488312b7bcb51efee8979ff35544997716 | |
parent | 4d0c632c70ea50d459c3c55ddda2e0f394dd51cb (diff) | |
download | wallabag-9f8f188d928b47503d39348c5990379a572b570a.tar.gz wallabag-9f8f188d928b47503d39348c5990379a572b570a.tar.zst wallabag-9f8f188d928b47503d39348c5990379a572b570a.zip |
Validate imported entry to avoid error on import
We got some imports with a missing `url` field generating some errors while trying to retrieve an existing entry with that url.
Introducing the `validateEntry` allow us to dismiss a message when it doesn't have an url (or other missing stuff in the future)
10 files changed, 108 insertions, 4 deletions
diff --git a/src/Wallabag/ImportBundle/Consumer/AbstractConsumer.php b/src/Wallabag/ImportBundle/Consumer/AbstractConsumer.php index b035f5cc..e4bfbdf0 100644 --- a/src/Wallabag/ImportBundle/Consumer/AbstractConsumer.php +++ b/src/Wallabag/ImportBundle/Consumer/AbstractConsumer.php | |||
@@ -52,6 +52,13 @@ abstract class AbstractConsumer | |||
52 | 52 | ||
53 | $this->import->setUser($user); | 53 | $this->import->setUser($user); |
54 | 54 | ||
55 | if (false === $this->import->validateEntry($storedEntry)) { | ||
56 | $this->logger->warning('Entry is invalid', ['entry' => $storedEntry]); | ||
57 | |||
58 | // return true to skip message | ||
59 | return true; | ||
60 | } | ||
61 | |||
55 | $entry = $this->import->parseEntry($storedEntry); | 62 | $entry = $this->import->parseEntry($storedEntry); |
56 | 63 | ||
57 | if (null === $entry) { | 64 | if (null === $entry) { |
diff --git a/src/Wallabag/ImportBundle/Import/AbstractImport.php b/src/Wallabag/ImportBundle/Import/AbstractImport.php index 58a234f4..d39d71b6 100644 --- a/src/Wallabag/ImportBundle/Import/AbstractImport.php +++ b/src/Wallabag/ImportBundle/Import/AbstractImport.php | |||
@@ -119,6 +119,15 @@ abstract class AbstractImport implements ImportInterface | |||
119 | abstract public function parseEntry(array $importedEntry); | 119 | abstract public function parseEntry(array $importedEntry); |
120 | 120 | ||
121 | /** | 121 | /** |
122 | * Validate that an entry is valid (like has some required keys, etc.). | ||
123 | * | ||
124 | * @param array $importedEntry | ||
125 | * | ||
126 | * @return bool | ||
127 | */ | ||
128 | abstract public function validateEntry(array $importedEntry); | ||
129 | |||
130 | /** | ||
122 | * Fetch content from the ContentProxy (using graby). | 131 | * Fetch content from the ContentProxy (using graby). |
123 | * If it fails return the given entry to be saved in all case (to avoid user to loose the content). | 132 | * If it fails return the given entry to be saved in all case (to avoid user to loose the content). |
124 | * | 133 | * |
@@ -141,9 +150,9 @@ abstract class AbstractImport implements ImportInterface | |||
141 | /** | 150 | /** |
142 | * Parse and insert all given entries. | 151 | * Parse and insert all given entries. |
143 | * | 152 | * |
144 | * @param $entries | 153 | * @param array $entries |
145 | */ | 154 | */ |
146 | protected function parseEntries($entries) | 155 | protected function parseEntries(array $entries) |
147 | { | 156 | { |
148 | $i = 1; | 157 | $i = 1; |
149 | $entryToBeFlushed = []; | 158 | $entryToBeFlushed = []; |
@@ -153,6 +162,10 @@ abstract class AbstractImport implements ImportInterface | |||
153 | $importedEntry = $this->setEntryAsRead($importedEntry); | 162 | $importedEntry = $this->setEntryAsRead($importedEntry); |
154 | } | 163 | } |
155 | 164 | ||
165 | if (false === $this->validateEntry($importedEntry)) { | ||
166 | continue; | ||
167 | } | ||
168 | |||
156 | $entry = $this->parseEntry($importedEntry); | 169 | $entry = $this->parseEntry($importedEntry); |
157 | 170 | ||
158 | if (null === $entry) { | 171 | if (null === $entry) { |
diff --git a/src/Wallabag/ImportBundle/Import/BrowserImport.php b/src/Wallabag/ImportBundle/Import/BrowserImport.php index 225f1791..4678ae0c 100644 --- a/src/Wallabag/ImportBundle/Import/BrowserImport.php +++ b/src/Wallabag/ImportBundle/Import/BrowserImport.php | |||
@@ -149,9 +149,9 @@ abstract class BrowserImport extends AbstractImport | |||
149 | /** | 149 | /** |
150 | * Parse and insert all given entries. | 150 | * Parse and insert all given entries. |
151 | * | 151 | * |
152 | * @param $entries | 152 | * @param array $entries |
153 | */ | 153 | */ |
154 | protected function parseEntries($entries) | 154 | protected function parseEntries(array $entries) |
155 | { | 155 | { |
156 | $i = 1; | 156 | $i = 1; |
157 | $entryToBeFlushed = []; | 157 | $entryToBeFlushed = []; |
diff --git a/src/Wallabag/ImportBundle/Import/ChromeImport.php b/src/Wallabag/ImportBundle/Import/ChromeImport.php index 09183abe..eccee698 100644 --- a/src/Wallabag/ImportBundle/Import/ChromeImport.php +++ b/src/Wallabag/ImportBundle/Import/ChromeImport.php | |||
@@ -33,6 +33,18 @@ class ChromeImport extends BrowserImport | |||
33 | /** | 33 | /** |
34 | * {@inheritdoc} | 34 | * {@inheritdoc} |
35 | */ | 35 | */ |
36 | public function validateEntry(array $importedEntry) | ||
37 | { | ||
38 | if (empty($importedEntry['url'])) { | ||
39 | return false; | ||
40 | } | ||
41 | |||
42 | return true; | ||
43 | } | ||
44 | |||
45 | /** | ||
46 | * {@inheritdoc} | ||
47 | */ | ||
36 | protected function prepareEntry(array $entry = []) | 48 | protected function prepareEntry(array $entry = []) |
37 | { | 49 | { |
38 | $data = [ | 50 | $data = [ |
diff --git a/src/Wallabag/ImportBundle/Import/FirefoxImport.php b/src/Wallabag/ImportBundle/Import/FirefoxImport.php index 73269fe1..8999e3f3 100644 --- a/src/Wallabag/ImportBundle/Import/FirefoxImport.php +++ b/src/Wallabag/ImportBundle/Import/FirefoxImport.php | |||
@@ -33,6 +33,18 @@ class FirefoxImport extends BrowserImport | |||
33 | /** | 33 | /** |
34 | * {@inheritdoc} | 34 | * {@inheritdoc} |
35 | */ | 35 | */ |
36 | public function validateEntry(array $importedEntry) | ||
37 | { | ||
38 | if (empty($importedEntry['uri'])) { | ||
39 | return false; | ||
40 | } | ||
41 | |||
42 | return true; | ||
43 | } | ||
44 | |||
45 | /** | ||
46 | * {@inheritdoc} | ||
47 | */ | ||
36 | protected function prepareEntry(array $entry = []) | 48 | protected function prepareEntry(array $entry = []) |
37 | { | 49 | { |
38 | $data = [ | 50 | $data = [ |
diff --git a/src/Wallabag/ImportBundle/Import/InstapaperImport.php b/src/Wallabag/ImportBundle/Import/InstapaperImport.php index e4f0970c..5a18c7c0 100644 --- a/src/Wallabag/ImportBundle/Import/InstapaperImport.php +++ b/src/Wallabag/ImportBundle/Import/InstapaperImport.php | |||
@@ -108,6 +108,18 @@ class InstapaperImport extends AbstractImport | |||
108 | /** | 108 | /** |
109 | * {@inheritdoc} | 109 | * {@inheritdoc} |
110 | */ | 110 | */ |
111 | public function validateEntry(array $importedEntry) | ||
112 | { | ||
113 | if (empty($importedEntry['url'])) { | ||
114 | return false; | ||
115 | } | ||
116 | |||
117 | return true; | ||
118 | } | ||
119 | |||
120 | /** | ||
121 | * {@inheritdoc} | ||
122 | */ | ||
111 | public function parseEntry(array $importedEntry) | 123 | public function parseEntry(array $importedEntry) |
112 | { | 124 | { |
113 | $existingEntry = $this->em | 125 | $existingEntry = $this->em |
diff --git a/src/Wallabag/ImportBundle/Import/PinboardImport.php b/src/Wallabag/ImportBundle/Import/PinboardImport.php index 110b0464..995d1f2c 100644 --- a/src/Wallabag/ImportBundle/Import/PinboardImport.php +++ b/src/Wallabag/ImportBundle/Import/PinboardImport.php | |||
@@ -83,6 +83,18 @@ class PinboardImport extends AbstractImport | |||
83 | /** | 83 | /** |
84 | * {@inheritdoc} | 84 | * {@inheritdoc} |
85 | */ | 85 | */ |
86 | public function validateEntry(array $importedEntry) | ||
87 | { | ||
88 | if (empty($importedEntry['href'])) { | ||
89 | return false; | ||
90 | } | ||
91 | |||
92 | return true; | ||
93 | } | ||
94 | |||
95 | /** | ||
96 | * {@inheritdoc} | ||
97 | */ | ||
86 | public function parseEntry(array $importedEntry) | 98 | public function parseEntry(array $importedEntry) |
87 | { | 99 | { |
88 | $existingEntry = $this->em | 100 | $existingEntry = $this->em |
diff --git a/src/Wallabag/ImportBundle/Import/PocketImport.php b/src/Wallabag/ImportBundle/Import/PocketImport.php index c1b35b7e..d3643389 100644 --- a/src/Wallabag/ImportBundle/Import/PocketImport.php +++ b/src/Wallabag/ImportBundle/Import/PocketImport.php | |||
@@ -170,6 +170,18 @@ class PocketImport extends AbstractImport | |||
170 | 170 | ||
171 | /** | 171 | /** |
172 | * {@inheritdoc} | 172 | * {@inheritdoc} |
173 | */ | ||
174 | public function validateEntry(array $importedEntry) | ||
175 | { | ||
176 | if (empty($importedEntry['resolved_url']) && empty($importedEntry['given_url'])) { | ||
177 | return false; | ||
178 | } | ||
179 | |||
180 | return true; | ||
181 | } | ||
182 | |||
183 | /** | ||
184 | * {@inheritdoc} | ||
173 | * | 185 | * |
174 | * @see https://getpocket.com/developer/docs/v3/retrieve | 186 | * @see https://getpocket.com/developer/docs/v3/retrieve |
175 | */ | 187 | */ |
diff --git a/src/Wallabag/ImportBundle/Import/ReadabilityImport.php b/src/Wallabag/ImportBundle/Import/ReadabilityImport.php index 002b27f4..a5f3798e 100644 --- a/src/Wallabag/ImportBundle/Import/ReadabilityImport.php +++ b/src/Wallabag/ImportBundle/Import/ReadabilityImport.php | |||
@@ -83,6 +83,18 @@ class ReadabilityImport extends AbstractImport | |||
83 | /** | 83 | /** |
84 | * {@inheritdoc} | 84 | * {@inheritdoc} |
85 | */ | 85 | */ |
86 | public function validateEntry(array $importedEntry) | ||
87 | { | ||
88 | if (empty($importedEntry['article__url'])) { | ||
89 | return false; | ||
90 | } | ||
91 | |||
92 | return true; | ||
93 | } | ||
94 | |||
95 | /** | ||
96 | * {@inheritdoc} | ||
97 | */ | ||
86 | public function parseEntry(array $importedEntry) | 98 | public function parseEntry(array $importedEntry) |
87 | { | 99 | { |
88 | $existingEntry = $this->em | 100 | $existingEntry = $this->em |
diff --git a/src/Wallabag/ImportBundle/Import/WallabagImport.php b/src/Wallabag/ImportBundle/Import/WallabagImport.php index c64ccd64..350d0600 100644 --- a/src/Wallabag/ImportBundle/Import/WallabagImport.php +++ b/src/Wallabag/ImportBundle/Import/WallabagImport.php | |||
@@ -89,6 +89,18 @@ abstract class WallabagImport extends AbstractImport | |||
89 | /** | 89 | /** |
90 | * {@inheritdoc} | 90 | * {@inheritdoc} |
91 | */ | 91 | */ |
92 | public function validateEntry(array $importedEntry) | ||
93 | { | ||
94 | if (empty($importedEntry['url'])) { | ||
95 | return false; | ||
96 | } | ||
97 | |||
98 | return true; | ||
99 | } | ||
100 | |||
101 | /** | ||
102 | * {@inheritdoc} | ||
103 | */ | ||
92 | public function parseEntry(array $importedEntry) | 104 | public function parseEntry(array $importedEntry) |
93 | { | 105 | { |
94 | $existingEntry = $this->em | 106 | $existingEntry = $this->em |