. */ namespace App\DataTables\Helpers; use App\Entity\Parts\Part; use App\Services\Attachments\AttachmentURLGenerator; use App\Services\Attachments\PartPreviewGenerator; use App\Services\EntityURLGenerator; use Symfony\Contracts\Translation\TranslatorInterface; /** * A helper service which contains common code to render columns for part related tables */ class PartDataTableHelper { private PartPreviewGenerator $previewGenerator; private AttachmentURLGenerator $attachmentURLGenerator; private TranslatorInterface $translator; private EntityURLGenerator $entityURLGenerator; public function __construct(PartPreviewGenerator $previewGenerator, AttachmentURLGenerator $attachmentURLGenerator, EntityURLGenerator $entityURLGenerator, TranslatorInterface $translator) { $this->previewGenerator = $previewGenerator; $this->attachmentURLGenerator = $attachmentURLGenerator; $this->translator = $translator; $this->entityURLGenerator = $entityURLGenerator; } public function renderName(Part $context): string { $icon = ''; //Depending on the part status we show a different icon (the later conditions have higher priority) if ($context->isFavorite()) { $icon = sprintf('', $this->translator->trans('part.favorite.badge')); } if ($context->isNeedsReview()) { $icon = sprintf('', $this->translator->trans('part.needs_review.badge')); } return sprintf( '%s%s', $this->entityURLGenerator->infoURL($context), $icon, htmlentities($context->getName()) ); } public function renderPicture(Part $context): string { $preview_attachment = $this->previewGenerator->getTablePreviewAttachment($context); if (null === $preview_attachment) { return ''; } $title = htmlspecialchars($preview_attachment->getName()); if ($preview_attachment->getFilename()) { $title .= ' ('.htmlspecialchars($preview_attachment->getFilename()).')'; } return sprintf( '%s', 'Part image', $this->attachmentURLGenerator->getThumbnailURL($preview_attachment), $this->attachmentURLGenerator->getThumbnailURL($preview_attachment, 'thumbnail_md'), 'img-fluid hoverpic', $title ); } }