Browse Source

Avoid file system access on checking if an image exists

Signed-off-by: Julius Härtl <jus@bitgrid.net>
tags/v24.0.0beta1
Julius Härtl 2 years ago
parent
commit
3d0b5c1ff9
No account linked to committer's email address
2 changed files with 11 additions and 16 deletions
  1. 6
    3
      apps/theming/lib/ImageManager.php
  2. 5
    13
      apps/theming/tests/ImageManagerTest.php

+ 6
- 3
apps/theming/lib/ImageManager.php View File

@@ -78,10 +78,8 @@ class ImageManager {

public function getImageUrl(string $key, bool $useSvg = true): string {
$cacheBusterCounter = $this->config->getAppValue('theming', 'cachebuster', '0');
try {
$image = $this->getImage($key, $useSvg);
if ($this->hasImage($key)) {
return $this->urlGenerator->linkToRoute('theming.Theming.getImage', [ 'key' => $key ]) . '?v=' . $cacheBusterCounter;
} catch (NotFoundException $e) {
}

switch ($key) {
@@ -132,6 +130,11 @@ class ImageManager {
return $folder->getFile($key);
}

public function hasImage(string $key): bool {
$mimeSetting = $this->config->getAppValue('theming', $key . 'Mime', '');
return $mimeSetting !== '';
}

/**
* @return array<string, array{mime: string, url: string}>
*/

+ 5
- 13
apps/theming/tests/ImageManagerTest.php View File

@@ -136,7 +136,6 @@ class ImageManagerTest extends TestCase {
['theming', 'logoMime', '']
)
->willReturn(0);
$this->mockGetImage('logo', $file);
$this->urlGenerator->expects($this->once())
->method('linkToRoute')
->willReturn('url-to-image');
@@ -148,9 +147,9 @@ class ImageManagerTest extends TestCase {
->method('getAppValue')
->withConsecutive(
['theming', 'cachebuster', '0'],
['theming', 'logoMime', false]
['theming', 'logoMime', '']
)
->willReturnOnConsecutiveCalls(0, false);
->willReturnOnConsecutiveCalls(0, '');
$this->urlGenerator->expects($this->once())
->method('imagePath')
->with('core', 'logo/logo.png')
@@ -167,15 +166,8 @@ class ImageManagerTest extends TestCase {
['theming', 'cachebuster', '0'],
['theming', 'logoMime', '']
)
->willReturn(0);
$this->mockGetImage('logo', $file);
$this->urlGenerator->expects($this->at(0))
->method('getBaseUrl')
->willReturn('baseurl');
$this->urlGenerator->expects($this->at(1))
->method('getAbsoluteUrl')
->willReturn('url-to-image-absolute?v=0');
$this->urlGenerator->expects($this->at(2))
->willReturnOnConsecutiveCalls(0, 0);
$this->urlGenerator->expects($this->any())
->method('getAbsoluteUrl')
->willReturn('url-to-image-absolute?v=0');
$this->assertEquals('url-to-image-absolute?v=0', $this->imageManager->getImageUrlAbsolute('logo', false));
@@ -207,7 +199,7 @@ class ImageManagerTest extends TestCase {
->method('getAppValue')
->with('theming', 'cachebuster', '0')
->willReturn('0');
$this->appData->expects($this->at(0))
$this->appData->expects($this->once())
->method('getFolder')
->with('0')
->willReturn($folder);

Loading…
Cancel
Save