Skip to content

Commit

Permalink
AdminView with all stored emails for a user (#25)
Browse files Browse the repository at this point in the history
adminView with all stored sent emails
  • Loading branch information
eugene-o-z authored and azine committed Nov 8, 2017
1 parent 133170f commit 772a048
Show file tree
Hide file tree
Showing 13 changed files with 621 additions and 4 deletions.
74 changes: 74 additions & 0 deletions Controller/AzineEmailController.php
@@ -0,0 +1,74 @@
<?php

namespace Azine\EmailBundle\Controller;

use Azine\EmailBundle\Entity\SentEmail;
use Azine\EmailBundle\Form\SentEmailType;
use FOS\UserBundle\Model\User;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

/**
* This controller provides the following actions:
*
* emailsDashboard: a list of all SentEmail entities with ability to filter by each property.
* emailDetailsByToken: extended view of SentEmail entity searched by a token property.
*/
class AzineEmailController extends Controller
{
/**
* Displays an Emails-Dashboard with filters for each property of SentEmails entity and links to
* emailDetailsByToken & webView actions for each email
*/
public function emailsDashboardAction(Request $request)
{
$form = $this->createForm(new SentEmailType());
$form->handleRequest($request);
$searchParams = $form->getData();
$repository = $this->getDoctrine()->getManager()->getRepository(SentEmail::class);

$emails = $repository->search($searchParams);
$emailsArray = [];

foreach ($emails as $key => $email){

$emailsArray[$key]['recipients'] = substr(implode(', ', $email->getRecipients()), 0, 60);
$emailsArray[$key]['template'] = $email->getTemplate();
$emailsArray[$key]['sent'] = $email->getSent()->format('Y-m-d H:i:s');
$emailsArray[$key]['variables'] = substr(json_encode($email->getVariables()), 0, 60);
$emailsArray[$key]['token'] = $email->getToken();
}

$pagination = $this->get('knp_paginator')->paginate($emailsArray, $request->query->get('page', 1));

return $this->render('AzineEmailBundle::emailsDashboard.html.twig',
['form' => $form->createView(), 'pagination' => $pagination ]);
}

/**
* Displays an extended view of SentEmail entity searched by a token property
* @param string $token
* @return Response
*/
public function emailDetailsByTokenAction(Request $request, $token)
{
$email = $this->getDoctrine()->getManager()->getRepository(SentEmail::class)
->findOneByToken($token);

if($email instanceof SentEmail){

$recipients = implode(', ', $email->getRecipients());
$variables = implode(', ', array_keys($email->getVariables()));

return $this->render('AzineEmailBundle::sentEmailDetails.html.twig',
['email' => $email, 'recipients' => $recipients, 'variables' => $variables]);
}

// the parameters-array is null => the email is not available in webView
$days = $this->getParameter("azine_email_web_view_retention");
$response = $this->render("AzineEmailBundle:Webview:mail.not.available.html.twig", array('days' => $days));
$response->setStatusCode(404);

return $response;
}
}
35 changes: 35 additions & 0 deletions Entity/Repositories/SentEmailRepository.php
Expand Up @@ -3,6 +3,7 @@
namespace Azine\EmailBundle\Entity\Repositories;

use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\QueryBuilder;

/**
* SentEmailRepository
Expand All @@ -12,4 +13,38 @@
*/
class SentEmailRepository extends EntityRepository
{
/**
* Search SentEmails by search params.
* @param $searchParams
* @return array of SentEmail
*/
public function search($searchParams = [])
{
$queryBuilder = $this->createQueryBuilder('e');

if (!empty($searchParams)) {

$searchAttributes = [
'recipients',
'template',
'sent',
'variables',
'token'
];

foreach ($searchAttributes as $attribute) {
if (empty($searchParams[$attribute])) {
continue;
}

$attributeValue = $searchParams[$attribute];

$queryBuilder->andWhere('e.'.$attribute.' LIKE :'.$attribute)
->setParameter($attribute, '%'.$attributeValue.'%');
}
}

$sentEmails = $queryBuilder->getQuery()->getResult();
return $sentEmails;
}
}
35 changes: 35 additions & 0 deletions Form/SentEmailType.php
@@ -0,0 +1,35 @@
<?php

namespace Azine\EmailBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class SentEmailType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->setMethod('GET');
$builder->add('recipients', 'text', ['label' => false, 'required' => false]);
$builder->add('template', 'text', ['label' => false, 'required' => false]);
$builder->add('sent', 'text', ['label' => false, 'required' => false]);
$builder->add('variables', 'text', ['label' => false, 'required' => false]);
$builder->add('token', 'text', ['label' => false, 'required' => false]);

$builder->add('save', 'submit', ['label' => 'email.dashboard.filter.button.label', 'attr' => ['class' => 'button']]);

}

/**
* @return string
*/
public function getName()
{
return 'sentEmail';
}
}
8 changes: 8 additions & 0 deletions Resources/config/routing.yml
Expand Up @@ -29,3 +29,11 @@ azine_email_send_test_email:
azine_email_test_sent_email_spam_score:
path: /admin/email/test-sent-email-spam-score
defaults: { _controller: "AzineEmailBundle:AzineEmailTemplate:checkSpamScoreOfSentEmail" }

azine_admin_email_dashboard:
path: /admin/email/dashboard
defaults: { _controller: "AzineEmailBundle:AzineEmail:emailsDashboard",}

azine_admin_email_details_by_token:
path: /admin/email/details/{token}
defaults: { _controller: "AzineEmailBundle:AzineEmail:emailDetailsByToken",}
43 changes: 43 additions & 0 deletions Resources/translations/messages.de.xliff
Expand Up @@ -90,6 +90,49 @@
<source>web.view.mail.not.available.title</source>
<target>Email nicht gefunden!</target>
</trans-unit>

<trans-unit id="3dtcx8jdffgdsfd2sthvj119c9pmhttuvzdy57j9" resname="email.dashboard.label">
<source state="new">email.dashboard.label</source>
<target>E-Mail Dashboard</target>
</trans-unit>
<trans-unit id="235897fsdffgdsfdgf8ba119c949e465f2ac25ao" resname="email.dashboard.recipients.label">
<source state="new">email.dashboard.recipients.label</source>
<target>Empfänger</target>
</trans-unit>
<trans-unit id="45y77f471ad584c318ba119c949e465f2acmkui6" resname="email.dashboard.template.label">
<source state="new">email.dashboard.template.label</source>
<target>Schablone</target>
</trans-unit>
<trans-unit id="9975ge7f471ad584c318ba1c949e4782694kj6ds" resname="email.dashboard.sent.label">
<source state="new">email.dashboard.sent.label</source>
<target>Senden Sie Datum</target>
</trans-unit>
<trans-unit id="88yh8f471ad584c318ba119c949e465f2poomvt5" resname="email.dashboard.variables.label">
<source state="new">email.dashboard.variables.label</source>
<target>Variable</target>
</trans-unit>
<trans-unit id="erterthg1ad584c318ba119c9lt78jk345dvg2fz" resname="email.dashboard.token.label">
<source state="new">email.dashboard.token.label</source>
<target>Token</target>
</trans-unit>

<trans-unit id="09kn53gerthg1ad584i119c9lt78jk345dv3xqp6" resname="email.dashboard.show.button.label">
<source state="new">email.dashboard.token.label</source>
<target>Anzeigen</target>
</trans-unit>
<trans-unit id="12dcr554nfvker73nkdnpw74h2ms9c949enhewz3" resname="email.dashboard.details.button.label">
<source state="new">email.dashboard.token.label</source>
<target>Detail</target>
</trans-unit>
<trans-unit id="71b8f24fenfvker73nkdnpfvv45ms9c936544bd3" resname="email.dashboard.loading">
<source state="new">email.dashboard.token.label</source>
<target>Laden</target>
</trans-unit>
<trans-unit id="951cgitjmnfvker73nkderf445gt49c93852rf12" resname="email.dashboard.filter.button.label">
<source state="new">email.dashboard.filter.button.label</source>
<target>Filtern</target>
</trans-unit>
Filter
</body>
</file>
</xliff>
43 changes: 43 additions & 0 deletions Resources/translations/messages.en.xliff
Expand Up @@ -90,6 +90,49 @@
<source>web.view.mail.not.available.title</source>
<target>Email not found!</target>
</trans-unit>

<trans-unit id="3dtcx8jdffgdsfd2sthvj119c9pmhttuvzdy57j9" resname="email.dashboard.label">
<source state="new">email.dashboard.label</source>
<target>Emails Dashboard</target>
</trans-unit>
<trans-unit id="235897fsdffgdsfdgf8ba119c949e465f2ac25ao" resname="email.dashboard.recipients.label">
<source state="new">email.dashboard.recipients.label</source>
<target>Recipients</target>
</trans-unit>
<trans-unit id="45y77f471ad584c318ba119c949e465f2acmkui6" resname="email.dashboard.template.label">
<source state="new">email.dashboard.template.label</source>
<target>Template</target>
</trans-unit>
<trans-unit id="9975ge7f471ad584c318ba1c949e4782694kj6ds" resname="email.dashboard.sent.label">
<source state="new">email.dashboard.sent.label</source>
<target>Send date</target>
</trans-unit>
<trans-unit id="88yh8f471ad584c318ba119c949e465f2poomvt5" resname="email.dashboard.variables.label">
<source state="new">email.dashboard.variables.label</source>
<target>Variables</target>
</trans-unit>
<trans-unit id="erterthg1ad584c318ba119c9lt78jk345dvg2fz" resname="email.dashboard.token.label">
<source state="new">email.dashboard.token.label</source>
<target>Token</target>
</trans-unit>

<trans-unit id="09kn53gerthg1ad584i119c9lt78jk345dv3xqp6" resname="email.dashboard.show.button.label">
<source state="new">email.dashboard.token.label</source>
<target>Show</target>
</trans-unit>
<trans-unit id="12dcr554nfvker73nkdnpw74h2ms9c949enhewz3" resname="email.dashboard.details.button.label">
<source state="new">email.dashboard.token.label</source>
<target>Details</target>
</trans-unit>

<trans-unit id="71b8f24fenfvker73nkdnpfvv45ms9c936544bd3" resname="email.dashboard.loading">
<source state="new">email.dashboard.token.label</source>
<target>Loading</target>
</trans-unit>
<trans-unit id="951cgitjmnfvker73nkderf445gt49c93852rf12" resname="email.dashboard.filter.button.label">
<source state="new">email.dashboard.filter.button.label</source>
<target>Filter</target>
</trans-unit>
</body>
</file>
</xliff>
38 changes: 38 additions & 0 deletions Resources/translations/messages.fr.xliff
Expand Up @@ -90,6 +90,44 @@
<source>web.view.mail.not.available.title</source>
<target>L'email n'existe pas!</target>
</trans-unit>

<trans-unit id="3dtcx8jdffgdsfd2sthvj119c9pmhttuvzdy57j9" resname="email.dashboard.label">
<source state="new">email.dashboard.recipients.label</source>
<target>Tableau de bord d'e-mails</target>
</trans-unit>
<trans-unit id="235897fsdffgdsfdgf8ba119c949e465f2ac25ao" resname="email.dashboard.recipients.label">
<source state="new">email.dashboard.recipients.label</source>
<target>Destinataires</target>
</trans-unit>
<trans-unit id="45y77f471ad584c318ba119c949e465f2acmkui6" resname="email.dashboard.template.label">
<source state="new">email.dashboard.template.label</source>
<target>Le modèle</target>
</trans-unit>
<trans-unit id="9975ge7f471ad584c318ba1c949e4782694kj6ds" resname="email.dashboard.sent.label">
<source state="new">email.dashboard.sent.label</source>
<target>Envoyez la date</target>
</trans-unit>
<trans-unit id="88yh8f471ad584c318ba119c949e465f2poomvt5" resname="email.dashboard.variables.label">
<source state="new">email.dashboard.variables.label</source>
<target>La variable</target>
</trans-unit>
<trans-unit id="erterthg1ad584c318ba119c9lt78jk345dvg2fz" resname="email.dashboard.token.label">
<source state="new">email.dashboard.token.label</source>
<target>Symbolique</target>
</trans-unit>

<trans-unit id="09kn53gerthg1ad584i119c9lt78jk345dv3xqp6" resname="email.dashboard.show.button.label">
<source state="new">email.dashboard.token.label</source>
<target>Présenter</target>
</trans-unit>
<trans-unit id="12dcr554nfvker73nkdnpw74h2ms9c949enhewz3" resname="email.dashboard.details.button.label">
<source state="new">email.dashboard.token.label</source>
<target>Le détail</target>
</trans-unit>
<trans-unit id="71b8f24fenfvker73nkdnpfvv45ms9c936544bd3" resname="email.dashboard.loading">
<source state="new">email.dashboard.token.label</source>
<target>Le chargement</target>
</trans-unit>
</body>
</file>
</xliff>
11 changes: 8 additions & 3 deletions Resources/views/base.html.twig
Expand Up @@ -5,6 +5,7 @@

{% block stylesheets -%}
<link type="text/css" rel="stylesheet" href="https://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" >
<link type="text/css" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/foundation/6.4.3/css/foundation.min.css" >
<style type="text/css">
.button{
background: none repeat scroll 0 0 #003E6D;
Expand Down Expand Up @@ -46,9 +47,13 @@
background: none repeat scroll 0 0 #2BA6CB;
}
.warn{
background: none repeat scroll 0 0 #DF940B;
}
.warn{
background: none repeat scroll 0 0 #DF940B;
}
.pagination a{
display: inline;
}
</style>
{% endblock stylesheets %}
Expand Down

0 comments on commit 772a048

Please sign in to comment.