Show a preview image in builtin attachment select autocomplete.

This commit is contained in:
Jan Böhmer 2020-06-01 14:51:38 +02:00
parent aa95f130db
commit f0d0a78f65
6 changed files with 65 additions and 6 deletions

View file

@ -42,9 +42,11 @@ declare(strict_types=1);
namespace App\Controller;
use App\Services\Attachments\AttachmentURLGenerator;
use App\Services\Attachments\BuiltinAttachmentsFinder;
use App\Services\TagFinder;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Asset\Packages;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
@ -59,6 +61,15 @@ use Symfony\Component\Serializer\Serializer;
*/
class TypeaheadController extends AbstractController
{
protected $urlGenerator;
protected $assets;
public function __construct(AttachmentURLGenerator $URLGenerator, Packages $assets)
{
$this->urlGenerator = $URLGenerator;
$this->assets = $assets;
}
/**
* @Route("/builtInResources/search", name="typeahead_builtInRessources")
*
@ -69,6 +80,15 @@ class TypeaheadController extends AbstractController
$query = $request->get('query');
$array = $finder->find($query);
$result = [];
foreach ($array as $path) {
$result[] = [
'name' => $path,
'image' => $this->assets->getUrl($this->urlGenerator->placeholderPathToAssetPath($path)),
];
}
$normalizers = [
new ObjectNormalizer(),
];
@ -76,7 +96,7 @@ class TypeaheadController extends AbstractController
new JsonEncoder(),
];
$serializer = new Serializer($normalizers, $encoders);
$data = $serializer->serialize($array, 'json');
$data = $serializer->serialize($result, 'json');
return new JsonResponse($data, 200, [], true);
}

View file

@ -101,6 +101,7 @@ class AttachmentPathResolver
/**
* Converts a path passed by parameter from services.yaml (which can be an absolute path or relative to project dir)
* to an absolute path. When a relative path is passed, the directory must exist or null is returned.
* Returns an absolute path with "/" no matter, what system is used.
*
* @internal
*
@ -132,8 +133,8 @@ class AttachmentPathResolver
return null;
}
//Otherwise return resolved path
return $tmp;
//Normalize file path (use / instead of \)
return str_replace('\\', '/', $tmp);
}
/**

View file

@ -91,6 +91,8 @@ class AttachmentURLGenerator
$public_path = $this->public_path;
}
//Our absolute path must begin with public path or we can not use it for asset pathes.
if (0 !== strpos($absolute_path, $public_path)) {
return null;
@ -100,6 +102,19 @@ class AttachmentURLGenerator
return substr($absolute_path, strlen($public_path) + 1);
}
/**
* Converts a placeholder path to a path to a image path.
*
* @param string $placeholder_path the placeholder path that should be converted
*
* @return string|null
*/
public function placeholderPathToAssetPath(string $placeholder_path): ?string
{
$absolute_path = $this->pathResolver->placeholderToRealPath($placeholder_path);
return $this->absolutePathToAssetPath($absolute_path);
}
/**
* Returns a URL under which the attachment file can be viewed.
*/