diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 69322273a118e..e45063d49a2d5 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -2381,12 +2381,39 @@ */ urlSpec.a = this._filesConfig.get('cropimagepreviews') ? 0 : 1; + // Use map to get consistent parameter ordering with activity app generated URl (php) + const urlSpecMap = new Map() + urlSpecMap.set('forceIcon', urlSpec.forceIcon) + urlSpecMap.set('a', urlSpec.a) + urlSpecMap.set('x', urlSpec.x) + urlSpecMap.set('y', urlSpec.y) + + if (urlSpec.mode) { + urlSpecMap.set('mode', urlSpec.mode) + } + if (typeof urlSpec.fileId !== 'undefined') { - delete urlSpec.file; - return OC.generateUrl('/core/preview?') + $.param(urlSpec); + urlSpecMap.set('fileId', urlSpec.fileId) + urlSpecMap.set('c', urlSpec.c) + + let param = [] + urlSpecMap.forEach((value, key) => { + param.push(encodeURIComponent(key) + '=' + encodeURIComponent(value)) + }) + param = param.join('&') + + return window.location.protocol + '//' + window.location.hostname + OC.generateUrl('/core/preview?') + param } else { - delete urlSpec.fileId; - return OC.generateUrl('/core/preview.png?') + $.param(urlSpec); + urlSpecMap.set('file', urlSpec.file) + urlSpecMap.set('c', urlSpec.c) + + let param = [] + urlSpecMap.forEach((key, value) => { + param.push(encodeURIComponent(key) + '=' + encodeURIComponent(value)) + }) + param = param.join('&') + + return window.location.protocol + '//' + window.location.hostname + OC.generateUrl('/core/preview.png?') + param } }, diff --git a/lib/private/Route/CachingRouter.php b/lib/private/Route/CachingRouter.php index f65060e710b88..38c21bfb2f5c6 100644 --- a/lib/private/Route/CachingRouter.php +++ b/lib/private/Route/CachingRouter.php @@ -49,8 +49,9 @@ public function __construct($cache, LoggerInterface $logger) { * @return string */ public function generate($name, $parameters = [], $absolute = false) { - asort($parameters); - $key = $this->context->getHost() . '#' . $this->context->getBaseUrl() . $name . sha1(json_encode($parameters)) . (int)$absolute; + $sortedParameters = $parameters; + asort($sortedParameters); + $key = $this->context->getHost() . '#' . $this->context->getBaseUrl() . $name . sha1(json_encode($sortedParameters)) . (int)$absolute; $cachedKey = $this->cache->get($key); if ($cachedKey) { return $cachedKey;