Skip to content

Commit

Permalink
WIP: Migrate to Brevo SDK
Browse files Browse the repository at this point in the history
  • Loading branch information
BadPixxel committed Nov 22, 2023
1 parent 45a4c2d commit 98ffdfd
Show file tree
Hide file tree
Showing 32 changed files with 1,426 additions and 774 deletions.
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
"ext-json": "*",

"symfony/config": "^5.4 || ^6.0",
"symfony/dependency-injection": "^5.4",
"symfony/dependency-injection": "^5.4 || ^6.0",
"symfony/event-dispatcher": "^5.4 || ^6.0",
"symfony/options-resolver": "^5.4 || ^6.0",

Expand Down
1,051 changes: 522 additions & 529 deletions composer.lock

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions src/BrevoBridgeBundle.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,13 @@

namespace BadPixxel\BrevoBridge;

use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\Bundle\Bundle;

/**
* A Small Bundle to Manage Sending User Email, Events & Sms via Sendinblue Transactional API.
*
* @property null|ContainerInterface $container
*/
class BrevoBridgeBundle extends Bundle
{
Expand Down
72 changes: 72 additions & 0 deletions src/Controller/Templates/Preview.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<?php

/*
* Copyright (C) BadPixxel <www.badpixxel.com>
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace BadPixxel\BrevoBridge\Controller\Templates;

use BadPixxel\BrevoBridge\Dictionary\TemplatesRoutes;
use BadPixxel\BrevoBridge\Interfaces\HtmlTemplateAwareInterface;
use BadPixxel\BrevoBridge\Services\RawHtmlRenderer;
use BadPixxel\BrevoBridge\Services\TemplateManager;
use Exception;
use Sonata\AdminBundle\Controller\CRUDController;
use Sonata\UserBundle\Model\UserInterface as User;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Session;

/**
* Render a Demo Email using Brevo Account Template by ID
*/
class Preview extends CRUDController
{
public function __construct(
private TemplateManager $tmplManager,
private RawHtmlRenderer $rawHtmlRenderer
) {
}

/**
* @throws Exception
*/
public function __invoke(Request $request, string $emailCode): Response
{
/** @var Session $session */
$session = $request->getSession();
/** @var User $user */
$user = $this->getUser();
//==============================================================================
// Identify Email Class
$emailClass = $this->tmplManager->getEmailByCode($emailCode);
if (is_null($emailClass) || !class_exists($emailClass)) {
return $this->redirectToRoute(TemplatesRoutes::LIST);
}
if (!is_subclass_of($emailClass, HtmlTemplateAwareInterface::class)) {
return $this->redirectToRoute(TemplatesRoutes::LIST);
}
//==============================================================================
// Fetch Email Template from API
$smtpTemplate = $this->tmplManager->get($emailClass, $user);
if (!$smtpTemplate) {
$session->getFlashBag()->add('sonata_flash_error', $this->tmplManager->getLastError());

return $this->redirectToRoute(TemplatesRoutes::LIST);
}

//==============================================================================
// Render Raw Html Template
return $this->rawHtmlRenderer->render(
$smtpTemplate->getHtmlContent(),
$this->tmplManager->getTmplParameters($emailClass, $user)
);
}
}
80 changes: 80 additions & 0 deletions src/Controller/Templates/Send.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
<?php

/*
* Copyright (C) BadPixxel <www.badpixxel.com>
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace BadPixxel\BrevoBridge\Controller\Templates;

use BadPixxel\BrevoBridge\Dictionary\TemplatesRoutes;
use BadPixxel\BrevoBridge\Models\AbstractEmail;
use BadPixxel\BrevoBridge\Services\SmtpManager;
use Exception;
use Sonata\AdminBundle\Controller\CRUDController;
use Sonata\UserBundle\Model\UserInterface as User;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Session;

/**
* Render a Brevo Email using Local Template Sources
*/
class Send extends CRUDController
{
public function __construct(
private SmtpManager $smtpManager,
) {
}

/**
* @throws Exception
*/
public function __invoke(Request $request, string $emailCode): Response
{
/** @var Session $session */
$session = $request->getSession();
/** @var User $user */
$user = $this->getUser();
//==============================================================================
// Identify Email Class
$emailClass = $this->smtpManager->getEmailByCode($emailCode);
if (is_null($emailClass)) {
$session->getFlashBag()->add('sonata_flash_error', 'Unable to identify Email');

return $this->redirectToRoute(TemplatesRoutes::LIST);
}
//==============================================================================
// Verify Email Class
if (!class_exists($emailClass)) {
$session->getFlashBag()->add('sonata_flash_error', 'Email Class: '.$emailClass.' was not found');

return $this->redirectToRoute(TemplatesRoutes::LIST);
}
if (!is_subclass_of($emailClass, AbstractEmail::class)) {
$session->getFlashBag()->add(
'sonata_flash_error',
'Email Class: '.$emailClass.' is not an '.AbstractEmail::class
);

return $this->redirectToRoute(TemplatesRoutes::LIST);
}
//==============================================================================
// Send Test Email
$email = $emailClass::sendDemo($user);
if (is_null($email)) {
$session->getFlashBag()->add('sonata_flash_error', $emailClass::getLastError());

return $this->redirectToRoute(TemplatesRoutes::LIST);
}
$session->getFlashBag()->add('sonata_flash_success', 'Test Email send to '.$user->getEmail());

return $this->redirectToRoute(TemplatesRoutes::LIST);
}
}
71 changes: 71 additions & 0 deletions src/Controller/Templates/View.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<?php

/*
* Copyright (C) BadPixxel <www.badpixxel.com>
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace BadPixxel\BrevoBridge\Controller\Templates;

use BadPixxel\BrevoBridge\Dictionary\TemplatesRoutes;
use BadPixxel\BrevoBridge\Services\RawHtmlRenderer;
use BadPixxel\BrevoBridge\Services\TemplateManager;
use Exception;
use Sonata\AdminBundle\Controller\CRUDController;
use Sonata\UserBundle\Model\UserInterface as User;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Session;

/**
* Render a Brevo Email using Local Template Sources
*/
class View extends CRUDController
{
public function __construct(
private TemplateManager $tmplManager,
private RawHtmlRenderer $rawHtmlRenderer
) {
}

/**
* @throws Exception
*/
public function __invoke(Request $request, string $emailCode): Response
{
/** @var Session $session */
$session = $request->getSession();
/** @var User $user */
$user = $this->getUser();
//==============================================================================
// Identify Email Class
$emailClass = $this->tmplManager->getEmailByCode($emailCode);
if (is_null($emailClass)) {
return $this->redirectToRoute(TemplatesRoutes::LIST);
}
if (!class_exists($emailClass) || !$this->tmplManager->isTemplateAware($emailClass)) {
return $this->redirectToRoute(TemplatesRoutes::LIST);
}
//==============================================================================
// Compile Email Template
$rawHtml = (string) $this->tmplManager->compile($emailClass);
if (!$rawHtml) {
$session->getFlashBag()->add('sonata_flash_error', $this->tmplManager->getLastError());

return $this->redirectToRoute(TemplatesRoutes::LIST);
}

//==============================================================================
// Render Raw Html Template
return $this->rawHtmlRenderer->render(
$rawHtml,
$this->tmplManager->getTmplParameters($emailClass, $user)
);
}
}
Loading

0 comments on commit 98ffdfd

Please sign in to comment.