X-Git-Url: https://git.rapsys.eu/userbundle/blobdiff_plain/7d0059507fed3fd5a81142370a46308e884c5c3d..d5e370cc785ba90e35ad3c97896c62e863fd7b33:/Controller/DefaultController.php

diff --git a/Controller/DefaultController.php b/Controller/DefaultController.php
index 11c7afb..2921311 100644
--- a/Controller/DefaultController.php
+++ b/Controller/DefaultController.php
@@ -10,8 +10,9 @@ use Symfony\Component\Form\FormError;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
 use Symfony\Component\Mailer\MailerInterface;
-use Symfony\Component\Mime\NamedAddress;
+use Symfony\Component\Mime\Address;
 use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
+use Symfony\Component\Routing\RouterInterface;
 use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
 use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
 use Symfony\Component\Translation\TranslatorInterface;
@@ -23,12 +24,46 @@ class DefaultController extends AbstractController {
 	//Translator instance
 	protected $translator;
 
-	public function __construct(ContainerInterface $container, TranslatorInterface $translator) {
+	public function __construct(ContainerInterface $container, TranslatorInterface $translator, RouterInterface $router) {
 		//Retrieve config
 		$this->config = $container->getParameter($this->getAlias());
 
 		//Set the translator
 		$this->translator = $translator;
+
+		//Get current action
+		//XXX: we don't use this as it would be too slow, maybe ???
+		#$action = str_replace(self::getAlias().'_', '', $container->get('request_stack')->getCurrentRequest()->get('_route'));
+
+		//Inject every requested route in view and mail context
+		foreach($this->config as $tag => $current) {
+			//Look for entry with route subkey
+			if (!empty($current['route'])) {
+				//Generate url for both view and mail
+				foreach(['view', 'mail'] as $view) {
+					//Check that context key is usable
+					if (isset($current[$view]['context']) && is_array($current[$view]['context'])) {
+						//Process every routes
+						foreach($current['route'] as $route => $key) {
+							//Skip recover_mail route as it requires some parameters
+							if ($route == 'recover_mail') {
+								continue;
+							}
+							//Check that key is empty
+							if (!isset($current[$view]['context'][$key])) {
+								//Generate the route
+								$this->config[$tag][$view]['context'][$key] = $router->generate(
+									$this->config['route'][$route]['name'],
+									$this->config['route'][$route]['context'],
+									//Generate absolute url for mails
+									$view=='mail'?UrlGeneratorInterface::ABSOLUTE_URL:UrlGeneratorInterface::ABSOLUTE_PATH
+								);
+							}
+						}
+					}
+				}
+			}
+		}
 	}
 
 	public function login(Request $request, AuthenticationUtils $authenticationUtils) {
@@ -87,7 +122,7 @@ class DefaultController extends AbstractController {
 					$mail =& $this->config['recover']['mail'];
 
 					//Generate each route route
-					foreach($mail['route'] as $route => $tag) {
+					foreach($this->config['recover']['route'] as $route => $tag) {
 						//Only process defined routes
 						if (empty($mail['context'][$tag]) && !empty($this->config['route'][$route])) {
 							//Process for recover mail url
@@ -118,7 +153,7 @@ class DefaultController extends AbstractController {
 					$subjectContext = [];
 
 					//Process each context pair
-					foreach($mail['context'] as $k => $v) {
+					foreach($mail['context']+$this->config['recover']['view']['context'] as $k => $v) {
 						//Reinsert each context pair with the key surrounded by %
 						$subjectContext['%'.$k.'%'] = $v;
 					}
@@ -129,10 +164,10 @@ class DefaultController extends AbstractController {
 					//Create message
 					$message = (new TemplatedEmail())
 						//Set sender
-						->from(new NamedAddress($this->config['contact']['mail'], $this->config['contact']['name']))
+						->from(new Address($this->config['contact']['mail'], $this->config['contact']['name']))
 						//Set recipient
 						//XXX: remove the debug set in vendor/symfony/mime/Address.php +46
-						->to(new NamedAddress($mail['context']['recipient_mail'], $mail['context']['recipient_name']))
+						->to(new Address($mail['context']['recipient_mail'], $mail['context']['recipient_name']))
 						//Set subject
 						->subject($mail['subject'])
 
@@ -141,7 +176,7 @@ class DefaultController extends AbstractController {
 						->textTemplate($mail['text'])
 
 						//Set context
-						->context(['subject' => $mail['subject']]+$mail['context']);
+						->context(['subject' => $mail['subject']]+$mail['context']+$this->config['recover']['view']['context']);
 
 					//Try sending message
 					//XXX: mail delivery may silently fail
@@ -223,7 +258,7 @@ class DefaultController extends AbstractController {
 					$hash = $slugger->hash($encoded);
 
 					//Generate each route route
-					foreach($mail['route'] as $route => $tag) {
+					foreach($this->config['recover_mail']['route'] as $route => $tag) {
 						//Only process defined routes
 						if (empty($mail['context'][$tag]) && !empty($this->config['route'][$route])) {
 							//Process for recover mail url
@@ -253,7 +288,7 @@ class DefaultController extends AbstractController {
 					$subjectContext = [];
 
 					//Process each context pair
-					foreach($mail['context'] as $k => $v) {
+					foreach($mail['context']+$this->config['recover_mail']['view']['context'] as $k => $v) {
 						//Reinsert each context pair with the key surrounded by %
 						$subjectContext['%'.$k.'%'] = $v;
 					}
@@ -264,10 +299,10 @@ class DefaultController extends AbstractController {
 					//Create message
 					$message = (new TemplatedEmail())
 						//Set sender
-						->from(new NamedAddress($this->config['contact']['mail'], $this->config['contact']['name']))
+						->from(new Address($this->config['contact']['mail'], $this->config['contact']['name']))
 						//Set recipient
 						//XXX: remove the debug set in vendor/symfony/mime/Address.php +46
-						->to(new NamedAddress($mail['context']['recipient_mail'], $mail['context']['recipient_name']))
+						->to(new Address($mail['context']['recipient_mail'], $mail['context']['recipient_name']))
 						//Set subject
 						->subject($mail['subject'])
 
@@ -276,7 +311,7 @@ class DefaultController extends AbstractController {
 						->textTemplate($mail['text'])
 
 						//Set context
-						->context(['subject' => $mail['subject']]+$mail['context']);
+						->context(['subject' => $mail['subject']]+$mail['context']+$this->config['recover_mail']['view']['context']);
 
 					//Try sending message
 					//XXX: mail delivery may silently fail
@@ -318,7 +353,7 @@ class DefaultController extends AbstractController {
 		));
 
 		if ($request->isMethod('POST')) {
-			// Refill the fields in case the form is not valid.
+			//Refill the fields in case the form is not valid.
 			$form->handleRequest($request);
 
 			if ($form->isValid()) {
@@ -329,7 +364,7 @@ class DefaultController extends AbstractController {
 				$mail =& $this->config['register']['mail'];
 
 				//Generate each route route
-				foreach($mail['route'] as $route => $tag) {
+				foreach($this->config['register']['route'] as $route => $tag) {
 					if (empty($mail['context'][$tag]) && !empty($this->config['route'][$route])) {
 						$mail['context'][$tag] = $this->get('router')->generate(
 							$this->config['route'][$route]['name'],
@@ -349,7 +384,7 @@ class DefaultController extends AbstractController {
 				$subjectContext = [];
 
 				//Process each context pair
-				foreach($mail['context'] as $k => $v) {
+				foreach($mail['context']+$this->config['register']['view']['context'] as $k => $v) {
 					//Reinsert each context pair with the key surrounded by %
 					$subjectContext['%'.$k.'%'] = $v;
 				}
@@ -360,10 +395,10 @@ class DefaultController extends AbstractController {
 				//Create message
 				$message = (new TemplatedEmail())
 					//Set sender
-					->from(new NamedAddress($this->config['contact']['mail'], $this->config['contact']['name']))
+					->from(new Address($this->config['contact']['mail'], $this->config['contact']['name']))
 					//Set recipient
 					//XXX: remove the debug set in vendor/symfony/mime/Address.php +46
-					->to(new NamedAddress($mail['context']['recipient_mail'], $mail['context']['recipient_name']))
+					->to(new Address($mail['context']['recipient_mail'], $mail['context']['recipient_name']))
 					//Set subject
 					->subject($mail['subject'])
 
@@ -372,7 +407,7 @@ class DefaultController extends AbstractController {
 					->textTemplate($mail['text'])
 
 					//Set context
-					->context(['subject' => $mail['subject']]+$mail['context']);
+					->context(['subject' => $mail['subject']]+$mail['context']+$this->config['register']['view']['context']);
 
 				//Get doctrine
 				$doctrine = $this->getDoctrine();