developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Ticket #831: server_name_significant.diff

File server_name_significant.diff, 11.0 KB (added by pulsation, 12 years ago)
  • plugins/urls/significant/jSignificantUrlsCompiler.class.php

     
    8989        $createUrlContent="<?php \n";
    9090        $defaultEntrypoints=array();
    9191
     92        $serverNames = array();
     93       
    9294        foreach($xml->children() as $name=>$tag){
    9395           if(!preg_match("/^(.*)entrypoint$/", $name,$m)){
    9496               //TODO : erreur
     
    107109           // alors on indique une regle supplementaire que matcherons
    108110           // toutes les urls qui ne correspondent pas aux autres rêgles
    109111           if($isDefault){
    110              $createUrlInfos['@'.$requestType]=array(2,$entryPoint, $isHttps);
     112             $createUrlInfos['@'.$requestType]=array(2,FALSE, $entryPoint, $isHttps);
    111113           }
    112114
    113115           $parseContent = "<?php \n";
    114116           foreach($tag->url as $url){
    115117               $module = (string)$url['module'];
     118               
     119               if (isset($url['servername'])) {
     120                   $servername  = (string)$url['servername'];
     121               } else {
     122                   $servername  = FALSE;
     123               }
     124
    116125               if(isset($url['https'])){
    117126                   $urlhttps=(((string)$url['https']) == 'true');
    118127               }else{
     
    128137               // concernant ce module passeront par ce point d'entrée.
    129138               if(!$isDefault && !isset($url['action']) && !isset($url['handler'])){
    130139                 $parseInfos[]=array($module, '', '/.*/', array(), array(), array(), false );
    131                  $createUrlInfos[$module.'~*@'.$requestType] = array(3,$urlep, $urlhttps);
     140                 $createUrlInfos[$module.'~*@'.$requestType] = array(3,$servername, $urlep, $urlhttps);
    132141                 continue;
    133142               }
    134143
     
    168177                  }
    169178                  $createUrlContent.="include_once('".$s->getPath()."');\n";
    170179                  $parseInfos[]=array($module, $action, $selclass, $actionOverride );
    171                   $createUrlInfos[$module.'~'.$action.'@'.$requestType] = array(0,$urlep, $urlhttps, $selclass);
     180                  $createUrlInfos[$module.'~'.$action.'@'.$requestType] = array(0,$servername, $urlep, $urlhttps, $selclass);
    172181                  if($actionOverride){
    173182                     foreach($actionOverride as $ao){
    174                         $createUrlInfos[$module.'~'.$ao.'@'.$requestType] = array(0,$urlep,$urlhttps, $selclass);
     183                        $createUrlInfos[$module.'~'.$ao.'@'.$requestType] = array(0,$servername, $urlep,$urlhttps, $selclass);
    175184                     }
    176185                  }
    177186                  continue;
    178187               }
    179 
     188                                if ($servername)
     189                        $serverNames[$servername] = Array(      'module'        => $module,
     190                                                                                                'action'        => $action);
     191               
    180192               $listparam=array();
    181193               $escapes = array();
    182194               if(isset($url['pathinfo'])){
     
    234246                        $regexppath.='\/?';
    235247                    }
    236248               }
    237 
     249               
    238250               $liststatics = array();
    239251               foreach($url->static as $var){
    240252                  $liststatics[(string)$var['name']] =(string)$var['value'];
    241253               }
    242254               $parseInfos[]=array($module, $action, '!^'.$regexppath.'$!', $listparam, $escapes, $liststatics, $actionOverride );
    243255               $cuisel = $module.'~'.$action.'@'.$requestType;
    244                $arr = array(1,$urlep, $urlhttps, $listparam, $escapes,$path, false, $liststatics);
     256               $arr = array(1,$servername,$urlep, $urlhttps, $listparam, $escapes,$path, false, $liststatics);
    245257               if(isset($createUrlInfos[$cuisel])){
    246258                    if($createUrlInfos[$cuisel][0] == 4){
    247259                        $createUrlInfos[$cuisel][] = $arr;
     
    254266               if($actionOverride){
    255267                  foreach($actionOverride as $ao){
    256268                     $cuisel = $module.'~'.$ao.'@'.$requestType;
    257                      $arr = array(1,$urlep, $urlhttps, $listparam, $escapes,$path, true, $liststatics);
     269                     $arr = array(1,$servername, $urlep, $urlhttps, $listparam, $escapes,$path, true, $liststatics);
    258270                     if(isset($createUrlInfos[$cuisel])){
    259271                        if($createUrlInfos[$cuisel][0] == 4){
    260272                            $createUrlInfos[$cuisel][] = $arr;
     
    267279                  }
    268280               }
    269281           }
    270 
     282           
    271283           $parseContent.='$GLOBALS[\'SIGNIFICANT_PARSEURL\'][\''.rawurlencode($entryPoint).'\'] = '.var_export($parseInfos, true).";\n?>";
    272284
    273285           jFile::write(JELIX_APP_TEMP_PATH.'compiled/urlsig/'.$aSelector->file.'.'.rawurlencode($entryPoint).'.entrypoint.php',$parseContent);
    274286        }
     287       
     288        $createUrlContent       .=      "\$GLOBALS['SIGNIFICANT_SERVERNAMES'] = "
     289                                                .       var_export($serverNames, true)
     290                                                .       ";\n";
     291       
    275292        $createUrlContent .='$GLOBALS[\'SIGNIFICANT_CREATEURL\'] ='.var_export($createUrlInfos, true).";\n?>";
    276293        jFile::write(JELIX_APP_TEMP_PATH.'compiled/urlsig/'.$aSelector->file.'.creationinfos.php',$createUrlContent);
     294       
    277295        return true;
    278296    }
    279297
  • plugins/urls/significant/significant.urls.php

     
    7171 */
    7272class significantUrlEngine implements jIUrlEngine {
    7373
     74        /*
     75         * url info array keys
     76         */
     77    const       URLINFO_TYPE            = 0;
     78    const       URLINFO_SERVERNAME      = 1;
     79    const       URLINFO_ENTRYPOINT      = 2;
     80    const       URLINFO_HTTPS           = 3;
     81    const       URLINFO_PARAMS          = 4;
     82    const       URLINFO_ESCAPES         = 5;
     83    const       URLINFO_SHAPE           = 6;
     84    const       URLINFO_OVERLOADING     = 7;
     85    const       URLINFO_STATICVALS      = 8;   
     86       
    7487    /**
    7588    * data to create significant url
    7689    * @var array
     
    266279        }
    267280        return $urlact;
    268281    }
    269 
    270 
     282   
    271283    /**
    272284    * Create a jurl object with the given action data
    273285    * @param jUrlAction $url  information about the action
     
    334346            array(3,'entrypoint', https true/false); pour les clés du type "module~@request"
    335347            array(4, array(1,..), array(1,..)...);
    336348        */
    337         if($urlinfo[0]==4){
     349        if($urlinfo[self::URLINFO_TYPE]==4){
    338350            $l = count($urlinfo);
    339351            $urlinfofound = null;
    340352            for($i=1; $i < $l; $i++){
    341353                $ok = true;
    342                 foreach($urlinfo[$i][7] as $n=>$v){
     354                foreach($urlinfo[$i][self::URLINFO_STATICVALS] as $n=>$v){
    343355                    if($url->getParam($n,'') != $v){
    344356                        $ok = false;
    345357                        break;
     
    353365            if($urlinfofound !== null){
    354366                $urlinfo = $urlinfofound;
    355367            }else{
    356                 $urlinfo = $urlinfo[1];
     368                $urlinfo = $urlinfo[self::URLINFO_ENTRYPOINT];
    357369            }
    358370        }
    359371
    360         $url->scriptName = $GLOBALS['gJConfig']->urlengine['basePath'].$urlinfo[1];
    361         if($urlinfo[2])
    362             $url->scriptName = 'https://'.$_SERVER['HTTP_HOST'].$url->scriptName;
    363 
    364         if($urlinfo[1] && !$GLOBALS['gJConfig']->urlengine['multiview']){
     372        $url->scriptName        = $GLOBALS['gJConfig']->urlengine['basePath'].$urlinfo[self::URLINFO_ENTRYPOINT];
     373                $server_name            = $urlinfo[self::URLINFO_SERVERNAME];
     374        if ($urlinfo[self::URLINFO_HTTPS]) {
     375            $url->scriptName = 'https://'.($server_name == '' ? $_SERVER['HTTP_HOST'] : $server_name) . $url->scriptName;
     376        } else if ($server_name != '') {
     377                        $url->scriptName = 'http://' . $server_name . $url->scriptName;
     378                }
     379               
     380        if($urlinfo[self::URLINFO_ENTRYPOINT] && !$GLOBALS['gJConfig']->urlengine['multiview']){
    365381            $url->scriptName.=$GLOBALS['gJConfig']->urlengine['entrypointExtension'];
    366382        }
    367         // pour certains types de requete, les paramètres ne sont pas dans l'url
     383        // pour certains types de requêtes, les paramètres ne sont pas dans l'url
    368384        // donc on les supprime
    369385        // c'est un peu crade de faire ça en dur ici, mais ce serait lourdingue
    370386        // de charger la classe request pour savoir si on peut supprimer ou pas
     
    373389            return $url;
    374390        }
    375391
    376         if($urlinfo[0]==0){
    377             $s = new jSelectorUrlHandler($urlinfo[3]);
     392        if($urlinfo[self::URLINFO_TYPE]==0){
     393            $s = new jSelectorUrlHandler($urlinfo[self::URLINFO_PARAMS]);
    378394            $c =$s->resource.'UrlsHandler';
    379395            $handler =new $c();
    380396            $handler->create($urlact, $url);
    381         }elseif($urlinfo[0]==1){
    382             $pi = $urlinfo[5];
    383             foreach ($urlinfo[3] as $k=>$param){
    384                 if($urlinfo[4][$k]){
     397        }elseif($urlinfo[self::URLINFO_TYPE]==1){
     398            $pi = $urlinfo[self::URLINFO_SHAPE];
     399            foreach ($urlinfo[self::URLINFO_PARAMS] as $k=>$param){
     400                if($urlinfo[self::URLINFO_ESCAPES][$k]){
    385401                    $pi=str_replace(':'.$param, jUrl::escape($url->getParam($param,''),true), $pi);
    386402                }else{
    387403                    $pi=str_replace(':'.$param, $url->getParam($param,''), $pi);
     
    389405                $url->delParam($param);
    390406            }
    391407            $url->pathInfo = $pi;
    392             if($urlinfo[6])
     408            if($urlinfo[self::URLINFO_OVERLOADING])
    393409                $url->setParam('action',$action);
    394410            // removed parameters corresponding to static values
    395             foreach($urlinfo[7] as $name=>$value){
     411            foreach($urlinfo[self::URLINFO_STATICVALS] as $name=>$value){
    396412                $url->delParam($name);
    397413            }
    398         }elseif($urlinfo[0]==3){
     414        }elseif($urlinfo[self::URLINFO_TYPE]==3){
    399415            $url->delParam('module');
    400416        }
    401417
  • core/jCoordinator.class.php

     
    117117        }
    118118    }
    119119
     120        /**
     121         * Add specific parameters to the request if we are hosted on a particular server
     122         */
     123    protected function addServerParameters($request) {
     124        // TODO: récupérer module et action en fonction de urls.xml
     125            $hostname           = $_SERVER['SERVER_NAME'];
     126        $serverNames    = $GLOBALS['SIGNIFICANT_SERVERNAMES'];
     127        if (isset($serverNames[$hostname])) {
     128                foreach ($serverNames[$hostname] as $parameter => $value) {
     129                                if (!$request->getParam($parameter)) {
     130                                        $request->params[$parameter] = $value;
     131                                }
     132                        }               
     133        }
     134    }
     135   
    120136    /**
    121137    * main method : launch the execution of the action.
    122138    *
     
    130146        $this->request->init();
    131147        jSession::start();
    132148
     149        $this->addServerParameters($request);
     150       
    133151        $this->moduleName = $request->getParam('module');
    134152        $this->actionName = $request->getParam('action');
    135153