Vous êtes connecté en tant que anonymous Se Deconnecter
application/class/Url.php
137b5e76
 <?php
 
daf6e125
 namespace MVC\Classe;
 
ee2d7d73
 //require_once dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR."config".DIRECTORY_SEPARATOR."define-constantes.php";
 
137b5e76
 class Url
 {
ee2d7d73
     public $page;
     public $registre;
 
ff461209
 
fa275ca6
     public function __construct($method, $appRequest)
     {
3957c7ee
 
ee2d7d73
         //on créé le registre des modules symfony
         $this->registre = new \MVC\Classe\ModularRegister();
 
         //définition des parametres de base
c2e0b12e
         $page = array();
         $page['name'] = 'accueil';
         $page['description'] = "";
         $page['params'] = array();
         $page['control'] = false;
3957c7ee
 
 
c2e0b12e
         $url = parse_url($_SERVER['REQUEST_URI']);
         $urlTrim = trim( $url['path'] , '/' );
         $urlParts = explode('/' , $urlTrim );
 
         //print_r($urlParts);
         if(isset($urlParts[0])) {
             //Récupération du nom de la page
             ($urlParts[0] == 'index' || $urlParts[0] == '') ? $page['name'] = 'accueil' : $page['name'] = $urlParts[0];
             //array_shift($urlParts);
             unset($urlParts[0]);
         }else{
             $page['name'] = 'accueil';
         }
3957c7ee
 
c2e0b12e
         if($page['name'] == 'control'){
             $page['control'] = true;
             ($urlParts[1] == 'index' || $urlParts[1] == '' ) ? $page['name']='accueil' : $page['name']=$urlParts[1];
             //array_shift($urlParts);
             unset($urlParts[1]);
3957c7ee
 
c2e0b12e
         }
aed8ee26
 
59ab808b
         //vérification du nombre de parametres:
c2e0b12e
         $numParts = count($urlParts);
59ab808b
         //s'il n'existe pas autant de clé que de valeurs, ce peut ^etre un module symfony
c2e0b12e
         if ( $numParts%2 != 0 ) {
59ab808b
             //si un module symfony n'est pas reférencé avec le nom de la page, on renvoi un erreur
c2e0b12e
             if( !in_array($page['name'], $this->registre->getIndex()) ){
                 $page['name'] = 'error';
                 $page['params'] = array();
71ac33a8
                 $this->page = $page;
                 return;
c2e0b12e
             }
ee2d7d73
             //cas d'utilisation normal : il existe autant de clé que de valeurs
59ab808b
         } else if ( $numParts != 0 ) {
c2e0b12e
             $values = array();
             $keys = array();
ee2d7d73
             foreach($urlParts as $key => $value ){
c2e0b12e
                 if($key%2 == 0) {
                     $values[] = $value;
                 } else {
                     $keys[] = $value;
                 }
             }
             if($page['control']){
                 $page['params'] = array_combine($values, $keys);
             }else {
                 $page['params'] = array_combine($keys, $values);
             }
         }
         //verification de l'existence de la page dans les controlleurs
         if($page['control']){
             $pageFile = TRAITEMENT_PATH . DIRECTORY_SEPARATOR . $page['name'] . '.php';
3957c7ee
         }else {
fa275ca6
             //recherche du fichier controlleur correpondant HTTP1.1 ou HTTP1.0
             switch ($method) {
                 //cas des requètes HTTP1.1
                 case 'PUT':
                 case 'DELETE':
                 case 'GET':
                 case 'POST':
                     if ($appRequest) {
                         $page['name'] = ucfirst($page['name']);
                         $pageFile = CONTROLLER_PATH . DIRECTORY_SEPARATOR . $page['name'] . 'HttpReponse.php';
                     } else {
                         $page['name'] = lcfirst($page['name']);
                         $pageFile = CONTROLLERS_PATH . DIRECTORY_SEPARATOR . $page['name'] . '.php';
                         if (!file_exists($pageFile)) {
                             $page['name'] = ucfirst($page['name']);
                             $pageFile = CONTROLLER_PATH . DIRECTORY_SEPARATOR . $page['name'] . 'HttpReponse.php';
                         }
                     }
             }
3957c7ee
         }
c2e0b12e
 
fa275ca6
         if (!file_exists($pageFile)) {
             if ($appRequest) {
                 $page['name'] = 'error';
             } else {
                 $page['name'] = 'Error';
             }
c2e0b12e
         }
         $this->page = $page;
 
     }
8640b6e0
 
     static public function link_rewrite($isControlPatern, $page, $params = array())
     {
         if ($isControlPatern) {
             return self::controlLink_rewrite($page, $params);
         } else {
             return self::link_rewrite_slashParam($page, $params);
         }
     }
 
     static private function link_rewrite_slashParam($page, $params = array())
     {
         $stringParams = '';
         foreach ($params as $key => $values) {
             $stringParams .= "/" . $key . "/" . $values;
         }
         return '/' . $page . $stringParams;
 
     }
 
     static private function controlLink_rewrite($page, $params = array())
     {
         $stringParams = '';
         foreach ($params as $key => $values) {
             $stringParams .= "/" . $key . "/" . $values;
         }
         return '/' . 'control' . '/' . $page . $stringParams;
     }
 
fa275ca6
     static public function absolute_link_rewrite($isControlPatern, $page, $params = array())
     {
         $url = $_SERVER['HTTP_HOST'];
         if ($isControlPatern) {
             $uri = self::controlLink_rewrite($page, $params);
         } else {
             $uri = self::link_rewrite_slashParam($page, $params);
         }
         if (isset($_SERVER['REQUEST_SCHEME'])) {
             $scheme = $_SERVER['REQUEST_SCHEME'];
         } else {
             $scheme = 'http';
         }
 
         return ($scheme . "://" . $url . $uri);
 
     }
 
137b5e76
 }