translator = $translator; $this->entityURLGenerator = $entityURLGenerator; $this->attachmentHelper = $attachmentHelper; $this->elementTypeNameGenerator = $elementTypeNameGenerator; $this->attachmentURLGenerator = $attachmentURLGenerator; } public function configure(DataTable $dataTable, array $options): void { $dataTable->add('picture', TextColumn::class, [ 'label' => '', 'render' => function ($value, Attachment $context) { if ($context->isPicture() && ! $context->isExternal() && $this->attachmentHelper->isFileExisting($context)) { return sprintf( '%s', 'Part image', $this->attachmentURLGenerator->getThumbnailURL($context), $this->attachmentURLGenerator->getThumbnailURL($context, 'thumbnail_md'), 'img-fluid hoverpic' ); } return ''; }, ]); $dataTable->add('name', TextColumn::class, [ 'label' => 'attachment.edit.name', 'render' => function ($value, Attachment $context) { //Link to external source if ($context->isExternal()) { return sprintf( '%s', htmlspecialchars($context->getURL()), htmlspecialchars($value) ); } if ($this->attachmentHelper->isFileExisting($context)) { return sprintf( '%s', $this->entityURLGenerator->viewURL($context), htmlspecialchars($value) ); } return $value; }, ]); $dataTable->add('attachment_type', TextColumn::class, [ 'label' => 'attachment.table.type', 'field' => 'attachment_type.name', 'render' => function ($value, Attachment $context) { return sprintf( '%s', $this->entityURLGenerator->editURL($context->getAttachmentType()), htmlspecialchars($value) ); }, ]); $dataTable->add('element', TextColumn::class, [ 'label' => 'attachment.table.element', //'propertyPath' => 'element.name', 'render' => function ($value, Attachment $context) { return sprintf( '%s', $this->entityURLGenerator->infoURL($context->getElement()), $this->elementTypeNameGenerator->getTypeNameCombination($context->getElement(), true) ); }, ]); $dataTable->add('filename', TextColumn::class, [ 'label' => $this->translator->trans('attachment.table.filename'), 'propertyPath' => 'filename', ]); $dataTable->add('filesize', TextColumn::class, [ 'label' => $this->translator->trans('attachment.table.filesize'), 'render' => function ($value, Attachment $context) { if ($this->attachmentHelper->isFileExisting($context)) { return $this->attachmentHelper->getHumanFileSize($context); } if ($context->isExternal()) { return ''.$this->translator->trans('attachment.external').''; } return sprintf( ' %s ', $this->translator->trans('attachment.file_not_found') ); }, ]); $dataTable ->add('addedDate', LocaleDateTimeColumn::class, [ 'label' => 'part.table.addedDate', 'visible' => false, ]) ->add('lastModified', LocaleDateTimeColumn::class, [ 'label' => 'part.table.lastModified', 'visible' => false, ]); $dataTable->add('show_in_table', BoolColumn::class, [ 'label' => 'attachment.edit.show_in_table', 'trueValue' => $this->translator->trans('true'), 'falseValue' => $this->translator->trans('false'), 'nullValue' => '', 'visible' => false, ]); $dataTable->add('isPicture', BoolColumn::class, [ 'label' => 'attachment.edit.isPicture', 'trueValue' => $this->translator->trans('true'), 'falseValue' => $this->translator->trans('false'), 'nullValue' => '', 'visible' => false, 'propertyPath' => 'picture', ]); $dataTable->add('is3DModel', BoolColumn::class, [ 'label' => 'attachment.edit.is3DModel', 'trueValue' => $this->translator->trans('true'), 'falseValue' => $this->translator->trans('false'), 'nullValue' => '', 'visible' => false, 'propertyPath' => '3dmodel', ]); $dataTable->add('isBuiltin', BoolColumn::class, [ 'label' => 'attachment.edit.isBuiltin', 'trueValue' => $this->translator->trans('true'), 'falseValue' => $this->translator->trans('false'), 'nullValue' => '', 'visible' => false, 'propertyPath' => 'builtin', ]); $dataTable->createAdapter(ORMAdapter::class, [ 'entity' => Attachment::class, 'query' => function (QueryBuilder $builder): void { $this->getQuery($builder); }, ]); } protected function getQuery(QueryBuilder $builder): void { $builder->distinct()->select('attachment') ->addSelect('attachment_type') //->addSelect('element') ->from(Attachment::class, 'attachment') ->leftJoin('attachment.attachment_type', 'attachment_type'); //->leftJoin('attachment.element', 'element'); } }