Changeset 320

Show
Ignore:
Timestamp:
11/29/06 11:48:18 (2 years ago)
Author:
laurentj
Message:
  • fix bug ticket #58: impossible de charger un handler url (url significant) (probleme de selecteur)

- amélioration : possibilité d'indiquer un handler de n'importe quel module
- ajout de units tests sur les urls dans testapp

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/build/manifests/testapp.mn

    r310 r320  
    1414  xmlrpc.php 
    1515  index.php 
     16  testnews.php 
     17cd testapp/www/foo 
     18  bar.php 
    1619cd testapp/www/design 
    1720  screen.css 
  • trunk/lib/jelix/core/url/jUrlCompiler.significant.class.php

    r267 r320  
    5050            o�         $isDefault : indique si c'est un point d'entr�par d�ut, et donc si le parser ne trouve rien, si il ignore ou fait une erreur 
    5151 
    52             $infoparser = array('module','action','nom handler') 
     52            $infoparser = array('module','action','selecteur handler') 
    5353            ou 
    5454            $infoparser = array( 'module','action', 'regexp_pathinfo', 
     
    6363            $CREATE_URL = array( 
    6464               'news~show@classic' => 
    65                   array(0,'entrypoint', https true/false, entrypoint true/false, 'handler') 
     65                  array(0,'entrypoint', https true/false, entrypoint true/false, 'selecteur handler') 
    6666                  ou 
    6767                  array(1,'entrypoint', https true/false, entrypoint true/false, 
     
    134134               if(isset($url['handler'])){ 
    135135                  $class = (string)$url['handler']; 
    136                   $s= new jSelectorUrlHandler($module.'~'.$class); 
     136                  // il faut absolument un nom de module dans le selecteur, car lors de l'analyse de l'url 
     137                  // dans le request, il n'y a pas de module connu dans le context (normal...) 
     138                  $p= strpos($class,'~'); 
     139                  if($p === false) 
     140                    $selclass = $module.'~'.$class; 
     141                  elseif( $p == 0) 
     142                    $selclass = $module.$class; 
     143                  else 
     144                    $selclass = $class; 
     145                  $s= new jSelectorUrlHandler($selclass); 
    137146                  $createUrlContent.="include_once('".$s->getPath()."');\n"; 
    138                   $parseInfos[]=array($module, $action, $class, $actionOverride ); 
    139                   $createUrlInfos[$module.'~'.$action.'@'.$requestType] = array(0,$urlep, $urlhttps, $class); 
     147                  $parseInfos[]=array($module, $action, $selclass, $actionOverride ); 
     148                  $createUrlInfos[$module.'~'.$action.'@'.$requestType] = array(0,$urlep, $urlhttps, $selclass); 
    140149                  if($actionOverride){ 
    141150                     foreach($actionOverride as $ao){ 
    142                         $createUrlInfos[$module.'~'.$ao.'@'.$requestType] = array(0,$urlep,$urlhttps, $class); 
     151                        $createUrlInfos[$module.'~'.$ao.'@'.$requestType] = array(0,$urlep,$urlhttps, $selclass); 
    143152                     } 
    144153                  } 
     
    201210               } 
    202211               $parseInfos[]=array($module, $action, '!^'.$regexppath.'$!', $listparam, $escapes, $liststatics, $actionOverride ); 
    203                $createUrlInfos[$module.'~'.$action.'@'.$requestType] = array(1,$urlep, $urlhttps, $listparam, $escapes,$path); 
     212               $createUrlInfos[$module.'~'.$action.'@'.$requestType] = array(1,$urlep, $urlhttps, $listparam, $escapes,$path, false); 
    204213               if($actionOverride){ 
    205214                  foreach($actionOverride as $ao){ 
    206                      $createUrlInfos[$module.'~'.$ao.'@'.$requestType] = array(1,$urlep, $urlhttps, $listparam, $escapes,$path); 
     215                     $createUrlInfos[$module.'~'.$ao.'@'.$requestType] = array(1,$urlep, $urlhttps, $listparam, $escapes,$path, true); 
    207216                  } 
    208217               } 
  • trunk/lib/jelix/core/url/jUrlEngine.significant.class.php

    r318 r320  
    155155            if(count($infoparsing) < 5){ 
    156156                // on a un tableau du style 
    157                 // array( 0=> 'module', 1=>'action', 2=>'handler', 3=>array('actions','secondaires')) 
     157                // array( 0=> 'module', 1=>'action', 2=>'selecteur handler', 3=>array('actions','secondaires')) 
    158158                $s = new jSelectorUrlHandler($infoparsing[2]); 
    159159#ifdef ENABLE_OLD_CLASS_NAMING 
     
    292292        /* 
    293293        urlinfo = 
    294             array(0,'entrypoint', https true/false, entrypoint true/false,'handler') 
     294            array(0,'entrypoint', https true/false, entrypoint true/false,'selecteur handler') 
    295295            ou 
    296296            array(1,'entrypoint', https true/false, entrypoint true/false 
     
    298298                    array(true, false..), // valeur des escapes 
    299299                    "/news/%1/%2/%3/%4-%5", // forme de l'url 
     300                    false, //indique si  c'est une action surchargeante 
    300301                    ) 
    301302            ou 
     
    347348            else 
    348349                $url->pathInfo = substr($result,1); 
     350            if($urlinfo[6]) 
     351                $url->setParam('action',$action); 
    349352 
    350353        }elseif($urlinfo[0]==3){ 
  • trunk/testapp/modules/unittest/classes/urlsig.urlhandler.php

    r314 r320  
    1212        if(preg_match("/^\/withhandler\/(.*)\/(.*)$/",$url->pathInfo,$match)){ 
    1313            $urlact = new jUrlAction($url->params); 
    14             $urlact->setParam('first',$match[1]); 
    15             $urlact->setParam('second',$match[2]); 
     14            $urlact->setParam('first',jUrl::unescape($match[1])); 
     15            $urlact->setParam('second',jUrl::unescape($match[2])); 
    1616            return $urlact; 
    1717        }else 
     
    2121    function create($urlact, $url){ 
    2222 
    23         $f=$url->getParam('first'); 
    24         $s=$url->getParam('second'); 
     23        $f=jUrl::escape($url->getParam('first')); 
     24        $s=jUrl::escape($url->getParam('second')); 
    2525 
    2626        $url->pathInfo = "/withhandler/$f/$s"; 
  • trunk/testapp/modules/unittest/classes/utcreateurls.class.php

    r318 r320  
    111111       );*/ 
    112112 
    113  
     113      jUrl::getEngine(true); // on recharge le nouveau moteur d'url 
    114114      $urlList=array(); 
    115115      $urlList[]= array('urlsig_url1', array('mois'=>'10',  'annee'=>'2005', 'id'=>'35')); 
     
    138138 
    139139      $gJConfig->urlengine['multiview']=true; 
     140      jUrl::getEngine(true); // on recharge le nouveau moteur d'url 
    140141      $trueResult=array( 
    141142          "/index?mois=10&annee=2005&id=35&module=unittest&action=urlsig_url1", 
     
    218219 
    219220      $urlList=array(); 
    220       $urlList[]= array('urlsig_url1', array('mois'=>'10',  'annee'=>'2005', 'id'=>'35')); 
     221      $urlList[]= array('urlsig_url1', array('mois'=>'10',  'annee'=>'2005', 'id'=>'01')); 
     222      $urlList[]= array('urlsig_url9', array('mois'=>'10',  'annee'=>'2005', 'id'=>'09')); 
     223      $urlList[]= array('urlsig_url10', array('mois'=>'10',  'annee'=>'2005', 'id'=>'10')); 
    221224      $urlList[]= array('urlsig_url2', array('mois'=>'05',  'annee'=>'2004')); 
    222225      $urlList[]= array('unittest~urlsig_url3', array('rubrique'=>'actualite',  'id_art'=>'65', 'article'=>'c\'est la f� au village')); 
     
    230233 
    231234      $trueResult=array( 
    232           "/index.php/test/news/2005/10/35", 
     235          "/index.php/test/news/2005/10/01", 
     236          "/index.php/test/news/2005/10/09?action=urlsig_url9", 
     237          "/index.php/test/news/2005/10/10?action=urlsig_url10", 
    233238          "/testnews.php/2004/05", 
    234239          "/index.php/test/cms/actualite/65-c-est-la-fete-au-village", 
     
    242247       ); 
    243248 
    244       $trueResult[8]='https://'.$_SERVER['HTTP_HOST'].$trueResult[8]; 
     249      $trueResult[10]='https://'.$_SERVER['HTTP_HOST'].$trueResult[10]; 
    245250      $this->_doCompareUrl("significant, multiview = false", $urlList,$trueResult); 
    246251 
     
    248253      $gJConfig->urlengine['multiview']=true; 
    249254      $trueResult=array( 
    250           "/index/test/news/2005/10/35", 
     255          "/index/test/news/2005/10/01", 
     256          "/index/test/news/2005/10/09?action=urlsig_url9", 
     257          "/index/test/news/2005/10/10?action=urlsig_url10", 
    251258          "/testnews/2004/05", 
    252259          "/index/test/cms/actualite/65-c-est-la-fete-au-village", 
     
    258265          "/index/shop/vetements/98" 
    259266       ); 
    260       $trueResult[8]='https://'.$_SERVER['HTTP_HOST'].$trueResult[8]; 
     267      $trueResult[10]='https://'.$_SERVER['HTTP_HOST'].$trueResult[10]; 
    261268      $this->_doCompareUrl("significant, multiview = true", $urlList,$trueResult); 
    262269 
  • trunk/testapp/modules/unittest/controllers/urlsig.classic.php

    r314 r320  
    1414class urlsigCtrl extends jController { 
    1515 
    16    function url1() { 
    17       return $this->getResponse('testunit'); 
     16   function url1($type='url1') { 
     17      $rep = $this->getResponse('unittest'); 
     18      $content='<h1>test url : news '.$type.'</h1>'; 
     19      $content.='<ul><li>annee='.$this->param('annee').'</li>'; 
     20      $content.='<li>mois='.$this->param('mois').'</li>'; 
     21      $content.='<li>id='.$this->param('id').'</li></ul>'; 
     22      $rep->body->assign('MAIN',$content); 
     23      return $rep; 
    1824   } 
    1925   function url2() { 
    20       return $this->getResponse('testunit'); 
     26      $rep = $this->getResponse('unittest'); 
     27      $content='<h1>test url : testnews (url2)</h1>'; 
     28      $content.='<ul><li>annee='.$this->param('annee').'</li>'; 
     29      $content.='<li>mois='.$this->param('mois').'</li>'; 
     30      $content.='<li>mystatic='.$this->param('mystatic').'</li></ul>'; 
     31      $rep->body->assign('MAIN',$content); 
     32      return $rep; 
    2133   } 
    2234   function url3() { 
    23       return $this->getResponse('testunit'); 
     35      $rep = $this->getResponse('unittest'); 
     36      $content='<h1>test url : cms (url3)</h1>'; 
     37      $content.='<ul><li>rubrique='.$this->param('rubrique').'</li>'; 
     38      $content.='<li>id_art='.$this->param('id_art').'</li>'; 
     39      $content.='<li>article='.$this->param('article').'</li></ul>'; 
     40      $rep->body->assign('MAIN',$content); 
     41      return $rep; 
    2442   } 
    2543   function url4() { 
    26       return $this->getResponse('testunit'); 
     44       $rep = $this->getResponse('unittest'); 
     45      $content='<h1>test url handler (url4)</h1>'; 
     46      $content.='<ul><li>first='.$this->param('first').'</li>'; 
     47      $content.='<li>second='.$this->param('second').'</li></ul>'; 
     48      $rep->body->assign('MAIN',$content); 
     49      return $rep; 
    2750   } 
    2851   function url5() { 
    29       return $this->getResponse('testunit'); 
     52      return $this->getResponse('unittest'); 
     53   } 
     54   function url6() { 
     55      $rep = $this->getResponse('testunit'); 
     56      $content='<h1>test url : cms2 (url6)</h1>'; 
     57      $content.='<ul><li>rubrique='.$this->param('rubrique').'</li>'; 
     58      $content.='<li>id_art='.$this->param('id_art').'</li></ul>'; 
     59      $rep->body->assign('MAIN',$content); 
     60      return $rep; 
     61   } 
     62   function url7() { 
     63      return $this->getResponse('unittest'); 
     64   } 
     65   function url8() { 
     66      return $this->url1('url8'); 
     67   } 
     68   function url9() { 
     69      return $this->url1('url9'); 
     70   } 
     71   function url10() { 
     72      return $this->url1('url10'); 
    3073   } 
    3174} 
  • trunk/testapp/modules/unittest/templates/menu.tpl

    r289 r320  
    22Version php : {$versionphp}<br/> 
    33Version Jelix: {$versionjelix}<br/> 
     4 
     5<p><a href="?">Retour �'accueil</a></p> 
    46<h3>Core</h3> 
    57<ul> 
    6     <li><a href="?module=unittest&amp;action=testselectoract">selecteurs d'action</a></li
     8    <li><a href="{jurl 'unittest~testselectoract'}">selecteurs d'action</a></li> <!--?module=unittest&amp;action=testselectoract--
    79</ul> 
    810<h3>jEvent</h3> 
     
    1618    <li><a href="?module=unittest&amp;action=testurlparse">Tester l'analyse d'url</a></li> 
    1719</ul> 
    18  
     20{if $isurlsig} 
     21<p>test urls : 
     22<a href="{jurl 'unittest~urlsig_url1',array('annee'=>'2006','mois'=>'10','id'=>'01')}">url1</a> 
     23<a href="{jurl 'unittest~urlsig_url9',array('annee'=>'2006','mois'=>'10','id'=>'09')}">url9</a> 
     24<a href="{jurl 'unittest~urlsig_url10',array('annee'=>'2006','mois'=>'10','id'=>'10')}">url10</a> 
     25<a href="{jurl 'unittest~urlsig_url3',array('rubrique'=>'voiture','id_art'=>'54','article'=>'dodge viper')}">url3</a> 
     26<a href="{jurl 'unittest~urlsig_url2',array('annee'=>'2005','mois'=>'7')}">url2</a> 
     27<a href="{jurl 'unittest~urlsig_url4',array('first'=>'premier parametre','second'=>'toto le rigolo')}">url4</a> 
     28</p>{/if} 
    1929<h3>jDao</h3> 
    2030<ul> 
     
    2838    <li><a href="?module=unittest&amp;action=testfilter">jFilter</a></li> 
    2939</ul> 
    30  
    31  
    32 <p><a href="?">Retour �'accueil</a></p> 
  • trunk/testapp/responses/myHtmlResponse.class.php

    r127 r320  
    2626       $this->body->assignIfNone('MAIN','<p>No content</p>'); 
    2727       $this->body->assignIfNone('page_title','Test App'); 
    28        $this->addCSSLink('design/screen.css'); 
     28       $this->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/screen.css'); 
    2929   } 
    3030} 
  • trunk/testapp/responses/testUnitResponse.class.php

    r273 r320  
    2525       $tpl->assign('versionphp',phpversion()); 
    2626       $tpl->assign('versionjelix',JELIX_VERSION); 
     27       $tpl->assign('isurlsig', $GLOBALS['gJConfig']->urlengine['engine'] == 'significant'); 
    2728       $this->body->assign('menu',$tpl->fetch('unittest~menu')); 
    2829       $this->body->assignIfNone('MAIN','<p></p>'); 
    2930       $this->body->assign('page_title', 'Test unitaires sur Jelix'); 
    30        $this->addCSSLink('design/screen.css'); 
     31       $this->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/screen.css'); 
    3132   } 
    3233 
  • trunk/testapp/var/config/dbprofils.ini.php.dist

    r57 r320  
    1717 
    1818 
     19[testapppdo] 
    1920; pour pdo : 
    20 ;driver=pdo 
    21 ;dsn=mysql:host=localhost;dbname=test 
    22 ;user= 
    23 ;password= 
     21driver=pdo 
     22dsn= "mysql:host=localhost;dbname=testapp" 
     23user=root 
     24password= 
Download in other formats: Unified Diff Zip Archive