Browse Source

Evolution #189: Route de choix de langue automatique

bastien 12 years ago
parent
commit
b8ad6dadee

+ 8 - 4
app/config/routing.yml View File

@@ -22,8 +22,12 @@ MuzichIndexBundle:
22 22
   prefix: /
23 23
     
24 24
 change_language:
25
-    pattern:  /change-language/{language}/{redirect}
26
-    defaults: { _controller: MuzichCoreBundle:Core:changeLanguage, redirect: referer }
25
+  pattern:  /change-language/{language}/{redirect}
26
+  defaults: { _controller: MuzichCoreBundle:Core:changeLanguage, redirect: referer }
27
+  
28
+language_automatic:
29
+  pattern:  /auto-language
30
+  defaults: { _controller: MuzichCoreBundle:Core:automaticLanguage }
27 31
   
28 32
 MuzichCoreBundle:
29 33
   resource: "@MuzichCoreBundle/Resources/config/routing.yml"
@@ -33,8 +37,8 @@ MuzichCoreBundle:
33 37
 MuzichHomeBundle:
34 38
   resource: "@MuzichHomeBundle/Resources/config/routing.yml"
35 39
   prefix: /{_locale}/
36
-  defaults:
37
-    _locale: fr
40
+#  defaults:
41
+#    _locale: fr
38 42
     
39 43
 # On doit rajouter une route au cas ou la langue n'est pas précisé.
40 44
 home_bis:

+ 29 - 1
src/Muzich/CoreBundle/Controller/CoreController.php View File

@@ -21,7 +21,7 @@ use Muzich\CoreBundle\Propagator\EventUser;
21 21
 
22 22
 class CoreController extends Controller
23 23
 {
24
-
24
+  
25 25
   /**
26 26
    * Action permettant de changer le language
27 27
    *
@@ -58,6 +58,34 @@ class CoreController extends Controller
58 58
   }
59 59
   
60 60
   /**
61
+   * 
62
+   * Cette action est écrite pour les utilisateur redirigé du a l'absence de 
63
+   * lague dans leur route.
64
+   * Cette redirection n'est pas interne au code, elle est actuellement effectué
65
+   * par le .htaccess lorsque il n'y as pas d'url (en plus de muzi.ch/
66
+   */
67
+  public function automaticLanguageAction()
68
+  {
69
+    $lang = $this->container->get('request')
70
+      ->getPreferredLanguage($this->container->getParameter('supported_langs')); 
71
+    
72
+    // Si on a une lang en sortie, 
73
+    if (is_null($lang))
74
+    {
75
+      $lang = 'fr';
76
+    }
77
+    
78
+    if ($this->getUser() != 'anon.')
79
+    {
80
+      return $this->redirect($this->generateUrl('home', array('_locale' => $lang)));
81
+    }
82
+    else
83
+    {
84
+      return $this->redirect($this->generateUrl('index', array('_locale' => $lang)));
85
+    }
86
+  }
87
+  
88
+  /**
61 89
    * Cette action permet a un utilisateur de suivre ou de ne plus suivre
62 90
    * un utilisateur ou un groupe.
63 91
    * 

+ 2 - 0
src/Muzich/CoreBundle/Resources/config/security.yml View File

@@ -53,6 +53,8 @@ security:
53 53
         - { path: ^/(?:fr|en)/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
54 54
         - { path: "^/(?:fr|en)/resetting", roles: IS_AUTHENTICATED_ANONYMOUSLY }
55 55
         - { path: "^/change-language/(?:fr|en)", roles: IS_AUTHENTICATED_ANONYMOUSLY }
56
+        - { path: "^/auto-language", roles: IS_AUTHENTICATED_ANONYMOUSLY }
57
+        
56 58
                 
57 59
         - { path: ^/_wdt/, role: IS_AUTHENTICATED_ANONYMOUSLY }
58 60
         - { path: ^/_profiler/, role: IS_AUTHENTICATED_ANONYMOUSLY }

+ 5 - 1
src/Muzich/IndexBundle/Resources/config/routing.yml View File

@@ -1,8 +1,12 @@
1 1
 ## Routing du Bundle Index
2 2
 
3
+index_without_locale:
4
+    pattern:  /hello/
5
+    defaults: { _controller: MuzichCoreBundle:Core:automaticLanguage }
6
+    
3 7
 index:
4 8
     pattern:  /hello/{_locale}
5
-    defaults: { _controller: MuzichIndexBundle:Index:index, _locale: fr }
9
+    defaults: { _controller: MuzichIndexBundle:Index:index }
6 10
 
7 11
 fos_user_security:
8 12
     resource: "@FOSUserBundle/Resources/config/routing/security.xml"