-
Notifications
You must be signed in to change notification settings - Fork 351
/
AttachmentProvider.php
120 lines (104 loc) · 4.05 KB
/
AttachmentProvider.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php
namespace Oro\Bundle\AttachmentBundle\Provider;
use Doctrine\Common\Util\ClassUtils;
use Doctrine\ORM\EntityManagerInterface;
use Oro\Bundle\AttachmentBundle\Entity\Attachment;
use Oro\Bundle\AttachmentBundle\Entity\File;
use Oro\Bundle\AttachmentBundle\Manager\AttachmentManager;
use Oro\Bundle\AttachmentBundle\Tools\AttachmentAssociationHelper;
use Oro\Bundle\EntityExtendBundle\PropertyAccess;
use Oro\Bundle\EntityExtendBundle\Tools\ExtendHelper;
use Oro\Component\PhpUtils\Formatter\BytesFormatter;
/**
* Provides attachments linked to an entity.
*/
class AttachmentProvider
{
/** @var EntityManagerInterface */
protected $em;
/** @var AttachmentAssociationHelper */
protected $attachmentAssociationHelper;
/** @var AttachmentManager */
private $attachmentManager;
/** @var PictureSourcesProviderInterface */
private $pictureSourcesProvider;
public function __construct(
EntityManagerInterface $em,
AttachmentAssociationHelper $attachmentAssociationHelper,
AttachmentManager $attachmentManager,
PictureSourcesProviderInterface $pictureSourcesProvider
) {
$this->em = $em;
$this->attachmentAssociationHelper = $attachmentAssociationHelper;
$this->attachmentManager = $attachmentManager;
$this->pictureSourcesProvider = $pictureSourcesProvider;
}
/**
* @param object $entity
*
* @return Attachment[]
*/
public function getEntityAttachments($entity)
{
$entityClass = ClassUtils::getClass($entity);
if ($this->attachmentAssociationHelper->isAttachmentAssociationEnabled($entityClass)) {
$fieldName = ExtendHelper::buildAssociationName($entityClass);
$repo = $this->em->getRepository(Attachment::class);
$qb = $repo->createQueryBuilder('a');
$qb->leftJoin('a.' . $fieldName, 'entity')
->where('entity.id = :entityId')
->setParameter('entityId', $entity->getId());
return $qb->getQuery()->getResult();
}
return [];
}
/**
* @param $entity
*
* @return File
*/
private function getAttachmentByEntity($entity)
{
return (PropertyAccess::createPropertyAccessor())->getValue($entity, 'attachment');
}
/**
* @param $entity
*
* @return array
*/
public function getAttachmentInfo($entity)
{
$result = [];
$attachment = $this->getAttachmentByEntity($entity);
if ($attachment && $attachment->getId()) {
$thumbnail = '';
$thumbnailSources = [];
if ($this->attachmentManager->isImageType($attachment->getMimeType())) {
$thumbnailPictureSources = $this->pictureSourcesProvider->getResizedPictureSources(
$attachment,
AttachmentManager::THUMBNAIL_WIDTH,
AttachmentManager::THUMBNAIL_HEIGHT
);
$thumbnail = $thumbnailPictureSources['src'];
$thumbnailSources = $thumbnailPictureSources['sources'];
}
$attachmentPictureSources = $this->pictureSourcesProvider->getFilteredPictureSources($attachment);
$result = [
'attachmentURL' => [
'url' => $attachmentPictureSources['src'],
'sources' => $attachmentPictureSources['sources'],
'downloadUrl' => $this->attachmentManager
->getFileUrl($attachment, FileUrlProviderInterface::FILE_ACTION_DOWNLOAD),
],
'attachmentSize' => BytesFormatter::format($attachment->getFileSize()),
'attachmentFileName' => $attachment->getOriginalFilename() ?: $attachment->getFilename(),
'attachmentIcon' => $this->attachmentManager->getAttachmentIconClass($attachment),
'attachmentThumbnailPicture' => [
'src' => $thumbnail,
'sources' => $thumbnailSources,
],
];
}
return $result;
}
}