Skip to content

Commit 4de10b8

Browse files
ViniToubarbaragr
authored andcommitted
replaced projectDir path with Kernel::locateResource
1 parent bf9da85 commit 4de10b8

File tree

3 files changed

+50
-20
lines changed

3 files changed

+50
-20
lines changed

src/bundle/Resources/config/services/notifier.yaml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@ services:
66

77
Ibexa\AdminUi\Notifier\PasswordReset:
88
decorates: Ibexa\Contracts\User\PasswordReset\NotifierInterface
9-
arguments:
10-
$projectDir: '%kernel.project_dir%'
119

1210
Ibexa\AdminUi\Notifier\UserInvitation:
1311
decorates: Ibexa\Contracts\User\Invitation\InvitationSender
14-
arguments:
15-
$projectDir: '%kernel.project_dir%'

src/lib/Notifier/PasswordReset.php

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,19 @@
1616
use Ibexa\Contracts\Notifications\Value\Recipent\UserRecipient;
1717
use Ibexa\Contracts\User\Notification\UserPasswordReset;
1818
use Ibexa\Contracts\User\PasswordReset\NotifierInterface;
19+
use InvalidArgumentException;
20+
use Psr\Log\LoggerAwareInterface;
21+
use Psr\Log\LoggerAwareTrait;
1922
use Swift_Image;
2023
use Swift_Mailer;
2124
use Swift_Message;
25+
use Symfony\Component\HttpKernel\KernelInterface;
2226
use Twig\Environment;
2327

24-
class PasswordReset implements NotifierInterface
28+
class PasswordReset implements NotifierInterface, LoggerAwareInterface
2529
{
30+
use LoggerAwareTrait;
31+
2632
private ConfigResolverInterface $configResolver;
2733

2834
private Swift_Mailer $mailer;
@@ -31,20 +37,33 @@ class PasswordReset implements NotifierInterface
3137

3238
private NotificationServiceInterface $notificationService;
3339

34-
private string $projectDir;
40+
private KernelInterface $kernel;
3541

3642
public function __construct(
3743
ConfigResolverInterface $configResolver,
3844
Swift_Mailer $mailer,
3945
Environment $twig,
4046
NotificationServiceInterface $notificationService,
41-
string $projectDir
47+
KernelInterface $kernel
4248
) {
4349
$this->configResolver = $configResolver;
4450
$this->mailer = $mailer;
4551
$this->twig = $twig;
4652
$this->notificationService = $notificationService;
47-
$this->projectDir = $projectDir;
53+
$this->kernel = $kernel;
54+
}
55+
56+
private function locateMailImage(string $imageName): string
57+
{
58+
try {
59+
return $this->kernel->locateResource('@IbexaAdminUiBundle/Resources/public/img/mail/' . $imageName);
60+
} catch (InvalidArgumentException $e) {
61+
if ($this->logger) {
62+
$this->logger->error('Failed to locate mail image: ' . $imageName, ['exception' => $e]);
63+
}
64+
65+
return '#';
66+
}
4867
}
4968

5069
public function sendMessage(User $user, string $hashKey): void
@@ -55,7 +74,6 @@ public function sendMessage(User $user, string $hashKey): void
5574
return;
5675
}
5776

58-
// Swiftmailer delivery has to be kept to maintain backwards compatibility
5977
$template = $this->twig->load($this->configResolver->getParameter('user_forgot_password.templates.mail'));
6078

6179
$senderAddress = $this->configResolver->hasParameter('sender_address', 'swiftmailer.mailer')
@@ -69,9 +87,7 @@ public function sendMessage(User $user, string $hashKey): void
6987
->setSubject($subject)
7088
->setTo($user->email);
7189

72-
$embeddedHeader = $message->embed(Swift_Image::fromPath(
73-
$this->projectDir . '/public/bundles/ibexaadminui/img/mail/header.png'
74-
));
90+
$embeddedHeader = $message->embed(Swift_Image::fromPath($this->locateMailImage('header.png')));
7591

7692
$body = $template->renderBlock('body', [
7793
'hash_key' => $hashKey,

src/lib/Notifier/UserInvitation.php

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,31 +11,50 @@
1111
use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface;
1212
use Ibexa\Contracts\User\Invitation\Invitation;
1313
use Ibexa\Contracts\User\Invitation\InvitationSender;
14+
use InvalidArgumentException;
15+
use Psr\Log\LoggerAwareInterface;
16+
use Psr\Log\LoggerAwareTrait;
1417
use Swift_Image;
1518
use Swift_Mailer;
1619
use Swift_Message;
20+
use Symfony\Component\HttpKernel\KernelInterface;
1721
use Twig\Environment;
1822

19-
final class UserInvitation implements InvitationSender
23+
final class UserInvitation implements InvitationSender, LoggerAwareInterface
2024
{
25+
use LoggerAwareTrait;
26+
2127
private Environment $twig;
2228

2329
private ConfigResolverInterface $configResolver;
2430

2531
private Swift_Mailer $mailer;
2632

27-
private string $projectDir;
33+
private KernelInterface $kernel;
2834

2935
public function __construct(
3036
Environment $twig,
3137
ConfigResolverInterface $configResolver,
3238
Swift_Mailer $mailer,
33-
string $projectDir
39+
KernelInterface $kernel
3440
) {
3541
$this->twig = $twig;
3642
$this->configResolver = $configResolver;
3743
$this->mailer = $mailer;
38-
$this->projectDir = $projectDir;
44+
$this->kernel = $kernel;
45+
}
46+
47+
private function locateMailImage(string $imageName): string
48+
{
49+
try {
50+
return $this->kernel->locateResource('@IbexaAdminUiBundle/Resources/public/img/mail/' . $imageName);
51+
} catch (InvalidArgumentException $e) {
52+
if ($this->logger) {
53+
$this->logger->error('Failed to locate mail image: ' . $imageName, ['exception' => $e]);
54+
}
55+
56+
return '#';
57+
}
3958
}
4059

4160
public function sendInvitation(Invitation $invitation): void
@@ -59,10 +78,9 @@ public function sendInvitation(Invitation $invitation): void
5978
->setSubject($subject)
6079
->setTo($invitation->getEmail());
6180

62-
$mailImagesDir = $this->projectDir . '/public/bundles/ibexaadminui/img/mail/';
63-
$embeddedHeader = $message->embed(Swift_Image::fromPath($mailImagesDir . 'header.jpg'));
64-
$embeddedBtnPrimaryLeftSide = $message->embed(Swift_Image::fromPath($mailImagesDir . 'btn_primary_left_side.jpg'));
65-
$embeddedBtnPrimaryRightSide = $message->embed(Swift_Image::fromPath($mailImagesDir . 'btn_primary_right_side.jpg'));
81+
$embeddedHeader = $message->embed(Swift_Image::fromPath($this->locateMailImage('header.jpg')));
82+
$embeddedBtnPrimaryLeftSide = $message->embed(Swift_Image::fromPath($this->locateMailImage('btn_primary_left_side.jpg')));
83+
$embeddedBtnPrimaryRightSide = $message->embed(Swift_Image::fromPath($this->locateMailImage('btn_primary_right_side.jpg')));
6684

6785
$body = $template->renderBlock('body', [
6886
'invite_hash' => $invitation->getHash(),

0 commit comments

Comments
 (0)