diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Wallabag/CoreBundle/Helper/ContentProxy.php | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/Wallabag/CoreBundle/Helper/ContentProxy.php b/src/Wallabag/CoreBundle/Helper/ContentProxy.php index 92351986..a93f4a2d 100644 --- a/src/Wallabag/CoreBundle/Helper/ContentProxy.php +++ b/src/Wallabag/CoreBundle/Helper/ContentProxy.php | |||
@@ -328,6 +328,18 @@ class ContentProxy | |||
328 | $parsed_entry_url = parse_url($entry->getUrl()); | 328 | $parsed_entry_url = parse_url($entry->getUrl()); |
329 | $parsed_content_url = parse_url($url); | 329 | $parsed_content_url = parse_url($url); |
330 | 330 | ||
331 | /** | ||
332 | * The following part computes the list of part changes between two | ||
333 | * parse_url arrays. | ||
334 | * | ||
335 | * As array_diff_assoc only computes changes to go from the left array | ||
336 | * to the right one, we make two differents arrays to have both | ||
337 | * directions. We merge these two arrays and sort keys before passing | ||
338 | * the result to the switch. | ||
339 | * | ||
340 | * The resulting array gives us all changing parts between the two | ||
341 | * urls: scheme, host, path, query and/or fragment. | ||
342 | */ | ||
331 | $diff_ec = array_diff_assoc($parsed_entry_url, $parsed_content_url); | 343 | $diff_ec = array_diff_assoc($parsed_entry_url, $parsed_content_url); |
332 | $diff_ce = array_diff_assoc($parsed_content_url, $parsed_entry_url); | 344 | $diff_ce = array_diff_assoc($parsed_content_url, $parsed_entry_url); |
333 | 345 | ||
@@ -340,6 +352,17 @@ class ContentProxy | |||
340 | return false; | 352 | return false; |
341 | } | 353 | } |
342 | 354 | ||
355 | /** | ||
356 | * This switch case lets us apply different behaviors according to | ||
357 | * changing parts of urls. | ||
358 | * | ||
359 | * As $diff_keys is an array, we provide arrays as cases. ['path'] means | ||
360 | * 'only the path is different between the two urls' whereas | ||
361 | * ['fragment', 'query'] means 'only fragment and query string parts are | ||
362 | * different between the two urls'. | ||
363 | * | ||
364 | * Note that values in $diff_keys are sorted. | ||
365 | */ | ||
343 | switch ($diff_keys) { | 366 | switch ($diff_keys) { |
344 | case ['path']: | 367 | case ['path']: |
345 | if (($parsed_entry_url['path'] . '/' === $parsed_content_url['path']) // diff is trailing slash, we only replace the url of the entry | 368 | if (($parsed_entry_url['path'] . '/' === $parsed_content_url['path']) // diff is trailing slash, we only replace the url of the entry |