diff options
Diffstat (limited to 'application/netscape/NetscapeBookmarkUtils.php')
-rw-r--r-- | application/netscape/NetscapeBookmarkUtils.php | 117 |
1 files changed, 55 insertions, 62 deletions
diff --git a/application/netscape/NetscapeBookmarkUtils.php b/application/netscape/NetscapeBookmarkUtils.php index 28665941..d64eef7f 100644 --- a/application/netscape/NetscapeBookmarkUtils.php +++ b/application/netscape/NetscapeBookmarkUtils.php | |||
@@ -7,8 +7,10 @@ use DateTimeZone; | |||
7 | use Exception; | 7 | use Exception; |
8 | use Katzgrau\KLogger\Logger; | 8 | use Katzgrau\KLogger\Logger; |
9 | use Psr\Log\LogLevel; | 9 | use Psr\Log\LogLevel; |
10 | use Shaarli\Bookmark\LinkDB; | 10 | use Shaarli\Bookmark\Bookmark; |
11 | use Shaarli\Bookmark\BookmarkServiceInterface; | ||
11 | use Shaarli\Config\ConfigManager; | 12 | use Shaarli\Config\ConfigManager; |
13 | use Shaarli\Formatter\BookmarkFormatter; | ||
12 | use Shaarli\History; | 14 | use Shaarli\History; |
13 | use Shaarli\NetscapeBookmarkParser\NetscapeBookmarkParser; | 15 | use Shaarli\NetscapeBookmarkParser\NetscapeBookmarkParser; |
14 | 16 | ||
@@ -20,41 +22,39 @@ class NetscapeBookmarkUtils | |||
20 | { | 22 | { |
21 | 23 | ||
22 | /** | 24 | /** |
23 | * Filters links and adds Netscape-formatted fields | 25 | * Filters bookmarks and adds Netscape-formatted fields |
24 | * | 26 | * |
25 | * Added fields: | 27 | * Added fields: |
26 | * - timestamp link addition date, using the Unix epoch format | 28 | * - timestamp link addition date, using the Unix epoch format |
27 | * - taglist comma-separated tag list | 29 | * - taglist comma-separated tag list |
28 | * | 30 | * |
29 | * @param LinkDB $linkDb Link datastore | 31 | * @param BookmarkServiceInterface $bookmarkService Link datastore |
30 | * @param string $selection Which links to export: (all|private|public) | 32 | * @param BookmarkFormatter $formatter instance |
31 | * @param bool $prependNoteUrl Prepend note permalinks with the server's URL | 33 | * @param string $selection Which bookmarks to export: (all|private|public) |
32 | * @param string $indexUrl Absolute URL of the Shaarli index page | 34 | * @param bool $prependNoteUrl Prepend note permalinks with the server's URL |
35 | * @param string $indexUrl Absolute URL of the Shaarli index page | ||
33 | * | 36 | * |
34 | * @throws Exception Invalid export selection | 37 | * @return array The bookmarks to be exported, with additional fields |
38 | *@throws Exception Invalid export selection | ||
35 | * | 39 | * |
36 | * @return array The links to be exported, with additional fields | ||
37 | */ | 40 | */ |
38 | public static function filterAndFormat($linkDb, $selection, $prependNoteUrl, $indexUrl) | 41 | public static function filterAndFormat( |
39 | { | 42 | $bookmarkService, |
43 | $formatter, | ||
44 | $selection, | ||
45 | $prependNoteUrl, | ||
46 | $indexUrl | ||
47 | ) { | ||
40 | // see tpl/export.html for possible values | 48 | // see tpl/export.html for possible values |
41 | if (!in_array($selection, array('all', 'public', 'private'))) { | 49 | if (!in_array($selection, array('all', 'public', 'private'))) { |
42 | throw new Exception(t('Invalid export selection:') . ' "' . $selection . '"'); | 50 | throw new Exception(t('Invalid export selection:') . ' "' . $selection . '"'); |
43 | } | 51 | } |
44 | 52 | ||
45 | $bookmarkLinks = array(); | 53 | $bookmarkLinks = array(); |
46 | foreach ($linkDb as $link) { | 54 | foreach ($bookmarkService->search([], $selection) as $bookmark) { |
47 | if ($link['private'] != 0 && $selection == 'public') { | 55 | $link = $formatter->format($bookmark); |
48 | continue; | 56 | $link['taglist'] = implode(',', $bookmark->getTags()); |
49 | } | 57 | if ($bookmark->isNote() && $prependNoteUrl) { |
50 | if ($link['private'] == 0 && $selection == 'private') { | ||
51 | continue; | ||
52 | } | ||
53 | $date = $link['created']; | ||
54 | $link['timestamp'] = $date->getTimestamp(); | ||
55 | $link['taglist'] = str_replace(' ', ',', $link['tags']); | ||
56 | |||
57 | if (is_note($link['url']) && $prependNoteUrl) { | ||
58 | $link['url'] = $indexUrl . $link['url']; | 58 | $link['url'] = $indexUrl . $link['url']; |
59 | } | 59 | } |
60 | 60 | ||
@@ -69,9 +69,9 @@ class NetscapeBookmarkUtils | |||
69 | * | 69 | * |
70 | * @param string $filename name of the file to import | 70 | * @param string $filename name of the file to import |
71 | * @param int $filesize size of the file to import | 71 | * @param int $filesize size of the file to import |
72 | * @param int $importCount how many links were imported | 72 | * @param int $importCount how many bookmarks were imported |
73 | * @param int $overwriteCount how many links were overwritten | 73 | * @param int $overwriteCount how many bookmarks were overwritten |
74 | * @param int $skipCount how many links were skipped | 74 | * @param int $skipCount how many bookmarks were skipped |
75 | * @param int $duration how many seconds did the import take | 75 | * @param int $duration how many seconds did the import take |
76 | * | 76 | * |
77 | * @return string Summary of the bookmark import status | 77 | * @return string Summary of the bookmark import status |
@@ -91,7 +91,7 @@ class NetscapeBookmarkUtils | |||
91 | $status .= vsprintf( | 91 | $status .= vsprintf( |
92 | t( | 92 | t( |
93 | 'was successfully processed in %d seconds: ' | 93 | 'was successfully processed in %d seconds: ' |
94 | . '%d links imported, %d links overwritten, %d links skipped.' | 94 | . '%d bookmarks imported, %d bookmarks overwritten, %d bookmarks skipped.' |
95 | ), | 95 | ), |
96 | [$duration, $importCount, $overwriteCount, $skipCount] | 96 | [$duration, $importCount, $overwriteCount, $skipCount] |
97 | ); | 97 | ); |
@@ -102,15 +102,15 @@ class NetscapeBookmarkUtils | |||
102 | /** | 102 | /** |
103 | * Imports Web bookmarks from an uploaded Netscape bookmark dump | 103 | * Imports Web bookmarks from an uploaded Netscape bookmark dump |
104 | * | 104 | * |
105 | * @param array $post Server $_POST parameters | 105 | * @param array $post Server $_POST parameters |
106 | * @param array $files Server $_FILES parameters | 106 | * @param array $files Server $_FILES parameters |
107 | * @param LinkDB $linkDb Loaded LinkDB instance | 107 | * @param BookmarkServiceInterface $bookmarkService Loaded LinkDB instance |
108 | * @param ConfigManager $conf instance | 108 | * @param ConfigManager $conf instance |
109 | * @param History $history History instance | 109 | * @param History $history History instance |
110 | * | 110 | * |
111 | * @return string Summary of the bookmark import status | 111 | * @return string Summary of the bookmark import status |
112 | */ | 112 | */ |
113 | public static function import($post, $files, $linkDb, $conf, $history) | 113 | public static function import($post, $files, $bookmarkService, $conf, $history) |
114 | { | 114 | { |
115 | $start = time(); | 115 | $start = time(); |
116 | $filename = $files['filetoupload']['name']; | 116 | $filename = $files['filetoupload']['name']; |
@@ -121,10 +121,10 @@ class NetscapeBookmarkUtils | |||
121 | return self::importStatus($filename, $filesize); | 121 | return self::importStatus($filename, $filesize); |
122 | } | 122 | } |
123 | 123 | ||
124 | // Overwrite existing links? | 124 | // Overwrite existing bookmarks? |
125 | $overwrite = !empty($post['overwrite']); | 125 | $overwrite = !empty($post['overwrite']); |
126 | 126 | ||
127 | // Add tags to all imported links? | 127 | // Add tags to all imported bookmarks? |
128 | if (empty($post['default_tags'])) { | 128 | if (empty($post['default_tags'])) { |
129 | $defaultTags = array(); | 129 | $defaultTags = array(); |
130 | } else { | 130 | } else { |
@@ -134,7 +134,7 @@ class NetscapeBookmarkUtils | |||
134 | ); | 134 | ); |
135 | } | 135 | } |
136 | 136 | ||
137 | // links are imported as public by default | 137 | // bookmarks are imported as public by default |
138 | $defaultPrivacy = 0; | 138 | $defaultPrivacy = 0; |
139 | 139 | ||
140 | $parser = new NetscapeBookmarkParser( | 140 | $parser = new NetscapeBookmarkParser( |
@@ -164,22 +164,18 @@ class NetscapeBookmarkUtils | |||
164 | // use value from the imported file | 164 | // use value from the imported file |
165 | $private = $bkm['pub'] == '1' ? 0 : 1; | 165 | $private = $bkm['pub'] == '1' ? 0 : 1; |
166 | } elseif ($post['privacy'] == 'private') { | 166 | } elseif ($post['privacy'] == 'private') { |
167 | // all imported links are private | 167 | // all imported bookmarks are private |
168 | $private = 1; | 168 | $private = 1; |
169 | } elseif ($post['privacy'] == 'public') { | 169 | } elseif ($post['privacy'] == 'public') { |
170 | // all imported links are public | 170 | // all imported bookmarks are public |
171 | $private = 0; | 171 | $private = 0; |
172 | } | 172 | } |
173 | 173 | ||
174 | $newLink = array( | 174 | $link = $bookmarkService->findByUrl($bkm['uri']); |
175 | 'title' => $bkm['title'], | 175 | $existingLink = $link !== null; |
176 | 'url' => $bkm['uri'], | 176 | if (! $existingLink) { |
177 | 'description' => $bkm['note'], | 177 | $link = new Bookmark(); |
178 | 'private' => $private, | 178 | } |
179 | 'tags' => $bkm['tags'] | ||
180 | ); | ||
181 | |||
182 | $existingLink = $linkDb->getLinkFromUrl($bkm['uri']); | ||
183 | 179 | ||
184 | if ($existingLink !== false) { | 180 | if ($existingLink !== false) { |
185 | if ($overwrite === false) { | 181 | if ($overwrite === false) { |
@@ -188,28 +184,25 @@ class NetscapeBookmarkUtils | |||
188 | continue; | 184 | continue; |
189 | } | 185 | } |
190 | 186 | ||
191 | // Overwrite an existing link, keep its date | 187 | $link->setUpdated(new DateTime()); |
192 | $newLink['id'] = $existingLink['id']; | ||
193 | $newLink['created'] = $existingLink['created']; | ||
194 | $newLink['updated'] = new DateTime(); | ||
195 | $newLink['shorturl'] = $existingLink['shorturl']; | ||
196 | $linkDb[$existingLink['id']] = $newLink; | ||
197 | $importCount++; | ||
198 | $overwriteCount++; | 188 | $overwriteCount++; |
199 | continue; | 189 | } else { |
190 | $newLinkDate = new DateTime('@' . strval($bkm['time'])); | ||
191 | $newLinkDate->setTimezone(new DateTimeZone(date_default_timezone_get())); | ||
192 | $link->setCreated($newLinkDate); | ||
200 | } | 193 | } |
201 | 194 | ||
202 | // Add a new link - @ used for UNIX timestamps | 195 | $link->setTitle($bkm['title']); |
203 | $newLinkDate = new DateTime('@' . strval($bkm['time'])); | 196 | $link->setUrl($bkm['uri'], $conf->get('security.allowed_protocols')); |
204 | $newLinkDate->setTimezone(new DateTimeZone(date_default_timezone_get())); | 197 | $link->setDescription($bkm['note']); |
205 | $newLink['created'] = $newLinkDate; | 198 | $link->setPrivate($private); |
206 | $newLink['id'] = $linkDb->getNextId(); | 199 | $link->setTagsString($bkm['tags']); |
207 | $newLink['shorturl'] = link_small_hash($newLink['created'], $newLink['id']); | 200 | |
208 | $linkDb[$newLink['id']] = $newLink; | 201 | $bookmarkService->addOrSet($link, false); |
209 | $importCount++; | 202 | $importCount++; |
210 | } | 203 | } |
211 | 204 | ||
212 | $linkDb->save($conf->get('resource.page_cache')); | 205 | $bookmarkService->save(); |
213 | $history->importLinks(); | 206 | $history->importLinks(); |
214 | 207 | ||
215 | $duration = time() - $start; | 208 | $duration = time() - $start; |