Source of file TemplateController.php
Size: 7,514 Bytes - Last Modified: 2023-11-16T22:56:03+01:00
/home/websites/teicee/packagist/site/phpdoc/conf/../vendor/teicee/mail-bundle/src/Controller/TemplateController.php
| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 | <?phpnamespace TIC\MailBundle\Controller; use TIC\CoreBundle\Base\TICController as BaseController; #use TIC\DormBundle\Traits\ControllerCrudable;use TIC\DormBundle\Traits\ControllerItemable; use TIC\TwigBundle\Traits\ControllerViewable; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\StreamedResponse; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted; use TIC\MailBundle\Service\MailerService; /** * Administration des modèles de notification par email. * * @Route("/") * @IsGranted("ROLE_ADMIN") */class TemplateController extends BaseController {# use ControllerCrudable;use ControllerItemable, ControllerViewable; /** * Liste des modèles de notification existants. * * @Route("/list", name="ticmail_template_list") * @Security("is_granted('ROLE_TICMAIL_VIEW')") */public function list(Request $request): Response { // recherche si des modèles restent à définir $missings = $this->getRepo()->listAvailableRefs($this->getParameter('tic_mail.templates')); if (\count($missings)) $this->alert('warning', array( 'title' => 'ticmail.alert.undefined_templates', 'extra' => \implode(", ", $missings), )); // génération du formulaire (modal import) $form_import = null; if ($this->checkRole('TICMAIL_EDIT')) { $this->ctxForm = 'TIC\MailBundle\Form\TemplateImportType'; $form_import = $this->getForm(null, $request, array( 'action' => $this->generateUrl('ticmail_template_import'), )); } // affichage de la liste return $this->renderAction('list', array( 'items' => $this->getRepo()->listAll(), 'missings' => $missings, 'form_import' => $form_import, )); } /** * Fiche détaillée d'un modèle de notification. * * @Route("/show/{id}", name="ticmail_template_show") * @Security("is_granted('ROLE_TICMAIL_VIEW')") */public function show(Request $request, MailerService $mailer, $id): Response { $config = $this->getParameter('tic_mail.config'); return $this->renderAction('show', array( 'item' => $this->getItem($id), 'admins' => $config['admins'], 'return' => $config['return'], 'sender' => \sprintf('"%s" <%s>', $config['fromname'], $config['fromaddr']), 'locales' => $mailer->getLocales(), 'deflocale' => $this->getParameter('kernel.default_locale'), )); } /** * Formulaire d'édition d'un modèle (création ou modification). * * @Route("/create", name="ticmail_template_create") * @Route("/update/{id}", name="ticmail_template_update") * @Security("is_granted('ROLE_TICMAIL_EDIT')") */public function form(Request $request, MailerService $mailer, $id = null): Response { $item = $this->getItem($id); // génération du formulaire $config = $this->getParameter('tic_mail.config'); $form = $this->getForm($item, $request, array( 'list_refs' => $this->getRepo()->listAvailableRefs($this->getParameter('tic_mail.templates'), $item->getRef()), 'admins' => $config['admins'], 'return' => $config['return'], 'sender' => \sprintf('"%s" <%s>', $config['fromname'], $config['fromaddr']), 'targets' => $this->getRepo()->getTargets(), 'formats' => $config['formats'], 'locales' => $mailer->getLocales(), 'deflocale' => $this->getParameter('kernel.default_locale'), )); // validation du formulaire if ($form->isSubmitted() and $form->isValid()) return $this->saveItem($item, true); // affichage du formulaire return $this->renderAction('form', array( 'form' => $form, 'item' => $item, 'vars' => $this->getVars($item->getRef()), )); } /** * Action d'activation/désactivation de propriétés. * * @Route("/{id}/toggle/{field}/{state}", name="ticmail_template_toggle", defaults={"state":null}, * requirements={"field":"enabled|bccAdmins"}) * @Security("is_granted('ROLE_TICMAIL_EDIT')") */public function toggle(Request $request, $id, $field, $state = null): Response { // modification de la propriété, enregistrement avec message et redirection par défaut (referer) return $this->toggleItem($this->getItem($id), $field, $state); } /** * Suppression d'un modèle de notification existant. * * @Route("/delete/{id}", name="ticmail_template_delete") * @Security("is_granted('ROLE_TICMAIL_FULL')") */public function delete(Request $request, $id): Response { # return $this->crudDelete($request, $id);$item = $this->getItem($id); if (false === $this->checkCSRF('delete'.$id, $request)) return $this->alert('danger', "error.csrf.invalid_token", $item); return $this->deleteItem($item, true); } /** * Export des données d'un modèle donné ou de tous les modèles. * Note : utilisation des formats Mail (MIME) et Mbox pour la concaténation des messages * * @Route("/export/{id}", name="ticmail_template_export", defaults={"id"="0"}) * @Security("is_granted('ROLE_TICMAIL_VIEW')") */public function export(Request $request, $id = null) { return new StreamedResponse(function() use ($id) { if (empty($id)) { foreach ($this->getRepo()->listAll() as $item) echo $item->exportMail(); } else { $item = $this->getItem($id); if ($item) echo $item->exportMail(); } }, 200, array( 'Content-Disposition' => \sprintf('attachment; filename="templates-%s.eml";', \date('Ymd_His')), )); } /** * Import des données de modèles uploadés au format Mail/Mbox (cf export). * * @Route("/import", name="ticmail_template_import") * @Security("is_granted('ROLE_TICMAIL_EDIT')") */public function import(Request $request): RedirectResponse { // génération du formulaire d'import $this->ctxForm = 'TIC\MailBundle\Form\TemplateImportType'; $form = $this->getForm(null, $request); // validation du formulaire d'import if ($form->isValid()) { $file = $form->get('messages')->getData()->openFile('r'); $rc = $this->getRepo()->importMail($file); if ($rc === true) return $this->alert('success', 'ticmail.alert.templates_import_ok', true); if ($rc === null) return $this->alert('warning', 'ticmail.alert.templates_import_no', true); return $this->alert('danger', array('title'=>'ticmail.alert.templates_import_err', 'text'=>$rc), true); } // affichage de la liste (contenant le formulaire d'import en modal) return $this->alert('warning', 'ticmail.alert.templates_import_no', true); } /** * Récupération des variables utilisables pour un modèle donnée. * * @param string $ref Référence du modèle édité. * @return array Liste des variables rangées par groupes */protected function getVars(string $ref = null): ?array { if ($ref === null) return null; $vargroups = $this->getParameter('tic_mail.vargroups'); $variables = $this->getParameter('tic_mail.variables'); if (! \is_array($vargroups)) return null; if (! \is_array($variables)) return null; if (! \array_key_exists($ref, $vargroups)) return null; if (! \is_array($vargroups[ $ref ])) return null; $vars = array(); foreach ($vargroups[ $ref ] as $group) { if (\is_array($group)) $vars['_'] = $group; elseif (\array_key_exists($group, $variables)) $vars[ $group ] = $variables[ $group ]; } return $vars; } } |